diff --git a/.gitignore b/.gitignore index da2d8747..3facbeb5 100644 --- a/.gitignore +++ b/.gitignore @@ -33,4 +33,6 @@ crash-reports/ Thumbs.db usernamecache.json options.txt +BloodMagic_Client.launch +BloodMagic_Server.launch diff --git a/src/main/java/WayofTime/bloodmagic/BloodMagic.java b/src/main/java/WayofTime/bloodmagic/BloodMagic.java index 4c9d009d..775618d7 100644 --- a/src/main/java/WayofTime/bloodmagic/BloodMagic.java +++ b/src/main/java/WayofTime/bloodmagic/BloodMagic.java @@ -2,11 +2,8 @@ package WayofTime.bloodmagic; import WayofTime.bloodmagic.api.util.helper.LogHelper; import WayofTime.bloodmagic.network.AlchemicalWizardryPacketHandler; -import WayofTime.bloodmagic.registry.ModBlocks; -import WayofTime.bloodmagic.registry.ModEntities; -import WayofTime.bloodmagic.registry.ModItems; -import WayofTime.bloodmagic.registry.ModPotions; import WayofTime.bloodmagic.proxy.CommonProxy; +import WayofTime.bloodmagic.registry.*; import WayofTime.bloodmagic.util.handler.EventHandler; import WayofTime.bloodmagic.util.helper.InventoryRenderHelper; import lombok.Getter; @@ -16,6 +13,7 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.FMLCommonHandler; 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.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; @@ -67,9 +65,13 @@ public class BloodMagic { } @Mod.EventHandler - public void init(FMLPreInitializationEvent event) { + public void init(FMLInitializationEvent event) { AlchemicalWizardryPacketHandler.init(); + ModRituals.initRituals(); + ModRituals.initImperfectRituals(); + ConfigHandler.checkRituals(); + proxy.init(); } diff --git a/src/main/java/WayofTime/bloodmagic/ConfigHandler.java b/src/main/java/WayofTime/bloodmagic/ConfigHandler.java index 8bef9b4c..730ed9b1 100644 --- a/src/main/java/WayofTime/bloodmagic/ConfigHandler.java +++ b/src/main/java/WayofTime/bloodmagic/ConfigHandler.java @@ -2,8 +2,12 @@ package WayofTime.bloodmagic; import WayofTime.bloodmagic.api.BloodMagicAPI; import WayofTime.bloodmagic.api.BlockStack; +import WayofTime.bloodmagic.api.registry.ImperfectRitualRegistry; +import WayofTime.bloodmagic.api.util.helper.RitualHelper; import WayofTime.bloodmagic.registry.ModPotions; import WayofTime.bloodmagic.util.Utils; +import lombok.Getter; +import lombok.Setter; import net.minecraft.block.Block; import net.minecraftforge.common.config.Configuration; import net.minecraftforge.fml.common.registry.GameRegistry; @@ -16,7 +20,9 @@ import java.util.List; public class ConfigHandler { - public static Configuration config; + @Getter + @Setter + private static Configuration config; // Teleposer public static String[] teleposerBlacklisting; @@ -159,6 +165,9 @@ public class ConfigHandler { vanillaPotionWaterBreathingEnabled = config.getBoolean("vanillaPotionWaterBreathingEnabled", category + ".toggle", true, "Enables the Water Breathing potion in Alchemy"); vanillaPotionWeaknessEnabled = config.getBoolean("vanillaPotionWeaknessEnabled", category + ".toggle", true, "Enables the Weakness potion in Alchemy"); + category = "Rituals"; + config.addCustomCategoryComment(category, "Ritual toggling"); + category = "General"; config.addCustomCategoryComment(category, "General settings"); BloodMagicAPI.setLoggingEnabled(config.getBoolean("enableLogging", category, true, "Allows logging information to the console. Fatal errors will bypass this")); @@ -192,4 +201,9 @@ public class ConfigHandler { teleposerBlacklist.add(new BlockStack(block, meta)); } } + + public static void checkRituals() { + RitualHelper.checkImperfectRituals(config, "WayofTime.bloodmagic.ritual.imperfect", "Rituals.imperfect"); + config.save(); + } } diff --git a/src/main/java/WayofTime/bloodmagic/api/registry/ImperfectRitualRegistry.java b/src/main/java/WayofTime/bloodmagic/api/registry/ImperfectRitualRegistry.java index f8a3f891..d3dc594b 100644 --- a/src/main/java/WayofTime/bloodmagic/api/registry/ImperfectRitualRegistry.java +++ b/src/main/java/WayofTime/bloodmagic/api/registry/ImperfectRitualRegistry.java @@ -1,9 +1,11 @@ package WayofTime.bloodmagic.api.registry; +import WayofTime.bloodmagic.api.BlockStack; import WayofTime.bloodmagic.api.BloodMagicAPI; import WayofTime.bloodmagic.api.ritual.imperfect.ImperfectRitual; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; +import net.minecraft.block.Block; import java.util.ArrayList; @@ -27,6 +29,17 @@ public class ImperfectRitualRegistry { } } + public static ImperfectRitual getRitualForBlock(BlockStack blockStack) { + for (ImperfectRitual imperfectRitual : getRegistry().values()) { + if (imperfectRitual.getRequiredBlock().equals(blockStack)) { + System.out.println(imperfectRitual.toString()); + return imperfectRitual; + } + } + + return null; + } + public static ImperfectRitual getRitualForId(String id) { return registry.get(id); } @@ -44,13 +57,22 @@ public class ImperfectRitualRegistry { } public static boolean ritualEnabled(ImperfectRitual imperfectRitual) { - return enabledRituals.get(imperfectRitual); + try { + return enabledRituals.get(imperfectRitual); + } catch (NullPointerException e) { + BloodMagicAPI.getLogger().error("Invalid Imperfect Ritual was called"); + return false; + } } public static BiMap getRegistry() { return HashBiMap.create(registry); } + public static BiMap getEnabledMap() { + return HashBiMap.create(enabledRituals); + } + public static ArrayList getIds() { return new ArrayList(registry.keySet()); } diff --git a/src/main/java/WayofTime/bloodmagic/api/registry/RitualRegistry.java b/src/main/java/WayofTime/bloodmagic/api/registry/RitualRegistry.java index 6d0fdea1..cff5bac0 100644 --- a/src/main/java/WayofTime/bloodmagic/api/registry/RitualRegistry.java +++ b/src/main/java/WayofTime/bloodmagic/api/registry/RitualRegistry.java @@ -2,6 +2,7 @@ package WayofTime.bloodmagic.api.registry; import WayofTime.bloodmagic.api.BloodMagicAPI; import WayofTime.bloodmagic.api.ritual.Ritual; +import WayofTime.bloodmagic.api.ritual.imperfect.ImperfectRitual; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import java.util.ArrayList; @@ -43,13 +44,22 @@ public class RitualRegistry { } public static boolean ritualEnabled(Ritual ritual) { - return enabledRituals.get(ritual); + try { + return enabledRituals.get(ritual); + } catch (NullPointerException e) { + BloodMagicAPI.getLogger().error("Invalid Ritual was called"); + return false; + } } public static BiMap getRegistry() { return HashBiMap.create(registry); } + public static BiMap getEnabledMap() { + return HashBiMap.create(enabledRituals); + } + public static ArrayList getIds() { return new ArrayList(registry.keySet()); } diff --git a/src/main/java/WayofTime/bloodmagic/api/ritual/IMasterRitualStone.java b/src/main/java/WayofTime/bloodmagic/api/ritual/IMasterRitualStone.java index 4e0a36f9..d5851424 100644 --- a/src/main/java/WayofTime/bloodmagic/api/ritual/IMasterRitualStone.java +++ b/src/main/java/WayofTime/bloodmagic/api/ritual/IMasterRitualStone.java @@ -1,15 +1,21 @@ package WayofTime.bloodmagic.api.ritual; -import WayofTime.bloodmagic.api.ritual.imperfect.IImperfectRitualStone; -import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; -public interface IMasterRitualStone extends IImperfectRitualStone { +public interface IMasterRitualStone { + + String getOwner(); + + boolean activateRitual(ItemStack activationCrystal, EntityPlayer activator); void performRitual(World world, BlockPos pos, Ritual ritual); + void stopRitual(); + void setCooldown(int cooldown); int getCooldown(); @@ -18,15 +24,11 @@ public interface IMasterRitualStone extends IImperfectRitualStone { EnumFacing getDirection(); - NBTTagCompound getCustomRitualTag(); - - void setCustomRitualTag(NBTTagCompound tag); - boolean areTanksEmpty(); int getRunningTime(); - LocalRitualStorage getLocalStorage(); + World getWorld(); - void setLocalStorage(LocalRitualStorage storage); + BlockPos getPos(); } diff --git a/src/main/java/WayofTime/bloodmagic/api/ritual/LocalRitualStorage.java b/src/main/java/WayofTime/bloodmagic/api/ritual/LocalRitualStorage.java deleted file mode 100644 index 848eb4f8..00000000 --- a/src/main/java/WayofTime/bloodmagic/api/ritual/LocalRitualStorage.java +++ /dev/null @@ -1,28 +0,0 @@ -package WayofTime.bloodmagic.api.ritual; - -import WayofTime.bloodmagic.api.NBTHolder; -import lombok.Getter; -import lombok.Setter; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; - -/** - * This class is used to pass ritual-specific data into the RitualEffect from the containing Master Ritual Stone. This is basically used as auxiliary storage, - * for when simply storing to NBT becomes... difficult. - */ -@Getter -@Setter -public class LocalRitualStorage { - - private BlockPos pos; - - public void writeToNBT(NBTTagCompound tagCompound) { - tagCompound.setInteger(NBTHolder.NBT_COORDX, pos.getX()); - tagCompound.setInteger(NBTHolder.NBT_COORDY, pos.getY()); - tagCompound.setInteger(NBTHolder.NBT_COORDZ, pos.getZ()); - } - - public void readFromNBT(NBTTagCompound tagCompound) { - this.pos = new BlockPos(tagCompound.getInteger(NBTHolder.NBT_COORDX), tagCompound.getInteger(NBTHolder.NBT_COORDY), tagCompound.getInteger(NBTHolder.NBT_COORDZ)); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/api/ritual/Ritual.java b/src/main/java/WayofTime/bloodmagic/api/ritual/Ritual.java index d323db6b..c82806bf 100644 --- a/src/main/java/WayofTime/bloodmagic/api/ritual/Ritual.java +++ b/src/main/java/WayofTime/bloodmagic/api/ritual/Ritual.java @@ -1,5 +1,6 @@ package WayofTime.bloodmagic.api.ritual; +import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.RequiredArgsConstructor; import net.minecraft.entity.player.EntityPlayer; @@ -9,6 +10,7 @@ import java.util.ArrayList; @Getter @RequiredArgsConstructor +@EqualsAndHashCode public abstract class Ritual { private final String name; @@ -32,10 +34,6 @@ public abstract class Ritual { public abstract ArrayList getComponents(); - public LocalRitualStorage getNewLocalStorage() { - return new LocalRitualStorage(); - } - public void addOffsetRunes(ArrayList components, int offset1, int offset2, int y, EnumRuneType rune) { components.add(new RitualComponent(new BlockPos(offset1, y, offset2), rune)); components.add(new RitualComponent(new BlockPos(offset2, y, offset1), rune)); diff --git a/src/main/java/WayofTime/bloodmagic/api/ritual/imperfect/IImperfectRitualStone.java b/src/main/java/WayofTime/bloodmagic/api/ritual/imperfect/IImperfectRitualStone.java index 01d47338..e66c0376 100644 --- a/src/main/java/WayofTime/bloodmagic/api/ritual/imperfect/IImperfectRitualStone.java +++ b/src/main/java/WayofTime/bloodmagic/api/ritual/imperfect/IImperfectRitualStone.java @@ -1,11 +1,12 @@ package WayofTime.bloodmagic.api.ritual.imperfect; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.BlockPos; import net.minecraft.world.World; public interface IImperfectRitualStone { - String getOwner(); + boolean performRitual(World world, BlockPos pos, ImperfectRitual imperfectRitual, EntityPlayer player); World getWorld(); diff --git a/src/main/java/WayofTime/bloodmagic/api/ritual/imperfect/ImperfectRitual.java b/src/main/java/WayofTime/bloodmagic/api/ritual/imperfect/ImperfectRitual.java index 0122f8a3..e9bfd1a2 100644 --- a/src/main/java/WayofTime/bloodmagic/api/ritual/imperfect/ImperfectRitual.java +++ b/src/main/java/WayofTime/bloodmagic/api/ritual/imperfect/ImperfectRitual.java @@ -1,19 +1,29 @@ package WayofTime.bloodmagic.api.ritual.imperfect; import WayofTime.bloodmagic.api.BlockStack; +import lombok.EqualsAndHashCode; +import lombok.Getter; import lombok.RequiredArgsConstructor; import net.minecraft.entity.player.EntityPlayer; @RequiredArgsConstructor +@Getter +@EqualsAndHashCode public abstract class ImperfectRitual { + private final String name; private final BlockStack requiredBlock; private final int activationCost; private final boolean lightshow; - public ImperfectRitual(BlockStack requiredBlock, int activationCost) { - this(requiredBlock, activationCost, false); + public ImperfectRitual(String name, BlockStack requiredBlock, int activationCost) { + this(name, requiredBlock, activationCost, false); } public abstract boolean onActivate(IImperfectRitualStone imperfectRitualStone, EntityPlayer player); + + @Override + public String toString() { + return getName() + ":" + getRequiredBlock().toString() + "@" + getActivationCost(); + } } diff --git a/src/main/java/WayofTime/bloodmagic/api/util/helper/RitualHelper.java b/src/main/java/WayofTime/bloodmagic/api/util/helper/RitualHelper.java index 19b297da..c00c6026 100644 --- a/src/main/java/WayofTime/bloodmagic/api/util/helper/RitualHelper.java +++ b/src/main/java/WayofTime/bloodmagic/api/util/helper/RitualHelper.java @@ -1,7 +1,10 @@ package WayofTime.bloodmagic.api.util.helper; +import WayofTime.bloodmagic.api.registry.ImperfectRitualRegistry; import WayofTime.bloodmagic.api.registry.RitualRegistry; import WayofTime.bloodmagic.api.ritual.Ritual; +import WayofTime.bloodmagic.api.ritual.imperfect.ImperfectRitual; +import com.google.common.collect.BiMap; import net.minecraftforge.common.config.Configuration; import sun.misc.Launcher; @@ -28,6 +31,14 @@ public class RitualHelper { return RitualRegistry.getIds().get(previousIndex); } + public static void checkImperfectRituals(Configuration config, String packageName, String category) { + checkRituals(config, packageName, category, ImperfectRitual.class, ImperfectRitualRegistry.enabledRituals); + } + + public static void checkRituals(Configuration config, String packageName, String category) { + checkRituals(config, packageName, category, Ritual.class, RitualRegistry.enabledRituals); + } + /** * Adds your Ritual to the {@link RitualRegistry#enabledRituals} Map. * This is used to determine whether your effect is enabled or not. @@ -35,13 +46,16 @@ public class RitualHelper { * The config option will be created as {@code B:ClassName=true} with a comment of * {@code Enables the ClassName ritual}. * + * Use {@link #} + * * Should be safe to modify at any point. * * @param config - Your mod's Forge {@link Configuration} object. * @param packageName - The package your Rituals are located in. * @param category - The config category to write to. */ - public static void checkRituals(Configuration config, String packageName, String category) { + @SuppressWarnings("unchecked") + private static void checkRituals(Configuration config, String packageName, String category, Class ritualClass, BiMap enabledMap) { String name = packageName; if (!name.startsWith("/")) name = "/" + name; @@ -60,8 +74,9 @@ public class RitualHelper { try { Object o = Class.forName(packageName + "." + className).newInstance(); - if (o instanceof Ritual) - RitualRegistry.enabledRituals.put((Ritual) o, config.get(category, className, true).getBoolean()); + if (ritualClass.isInstance(o)) + enabledMap.put(ritualClass.cast(o), + config.get(category, className, true).getBoolean()); } catch (ClassNotFoundException e) { e.printStackTrace(); diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockAltar.java b/src/main/java/WayofTime/bloodmagic/block/BlockAltar.java index 74bc7915..c013f458 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockAltar.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockAltar.java @@ -15,6 +15,26 @@ public class BlockAltar extends BlockContainer { setCreativeTab(BloodMagic.tabBloodMagic); } + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean isFullCube() { + return false; + } + + @Override + public boolean isVisuallyOpaque() { + return false; + } + + @Override + public int getRenderType() { + return 3; + } + @Override public TileEntity createNewTileEntity(World world, int meta) { // return new TileAltar(); diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java b/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java index 57d9cb9a..b7843e81 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java @@ -1,6 +1,9 @@ package WayofTime.bloodmagic.block; import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.api.BlockStack; +import WayofTime.bloodmagic.api.registry.ImperfectRitualRegistry; +import WayofTime.bloodmagic.tile.TileImperfectRitualStone; import WayofTime.bloodmagic.tile.TileMasterRitualStone; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; @@ -13,6 +16,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumFacing; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; @@ -43,6 +47,21 @@ public class BlockRitualController extends BlockContainer { list.add(new ItemStack(this, 1, i)); } + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) { + TileEntity tile = world.getTileEntity(pos); + + if (getMetaFromState(state) == 1 && tile instanceof TileImperfectRitualStone) { + + IBlockState determinerState = world.getBlockState(pos.up()); + BlockStack determiner = new BlockStack(determinerState.getBlock(), determinerState.getBlock().getMetaFromState(determinerState)); + + return ((TileImperfectRitualStone) tile).performRitual(world, pos, ImperfectRitualRegistry.getRitualForBlock(determiner), player); + } + + return false; + } + @Override public int getRenderType() { return 3; @@ -75,6 +94,6 @@ public class BlockRitualController extends BlockContainer { @Override public TileEntity createNewTileEntity(World world, int meta) { - return meta == 0 ? new TileMasterRitualStone() : null; + return meta == 0 ? new TileMasterRitualStone() : new TileImperfectRitualStone(); } } diff --git a/src/main/java/WayofTime/bloodmagic/client/gui/ConfigGui.java b/src/main/java/WayofTime/bloodmagic/client/gui/ConfigGui.java index 5b4df0ac..6e56b803 100644 --- a/src/main/java/WayofTime/bloodmagic/client/gui/ConfigGui.java +++ b/src/main/java/WayofTime/bloodmagic/client/gui/ConfigGui.java @@ -21,10 +21,11 @@ public class ConfigGui extends GuiConfig { List list = new ArrayList(); // adds sections declared in ConfigHandler. toLowerCase() is used because the configuration class automatically does this, so must we. - list.add(new ConfigElement(ConfigHandler.config.getCategory("Potions".toLowerCase()))); - list.add(new ConfigElement(ConfigHandler.config.getCategory("Teleposer Blacklist".toLowerCase()))); - list.add(new ConfigElement(ConfigHandler.config.getCategory("Item/Block Blacklisting".toLowerCase()))); - list.add(new ConfigElement(ConfigHandler.config.getCategory("General".toLowerCase()))); + list.add(new ConfigElement(ConfigHandler.getConfig().getCategory("Potions".toLowerCase()))); + list.add(new ConfigElement(ConfigHandler.getConfig().getCategory("Teleposer Blacklist".toLowerCase()))); + list.add(new ConfigElement(ConfigHandler.getConfig().getCategory("Item/Block Blacklisting".toLowerCase()))); + list.add(new ConfigElement(ConfigHandler.getConfig().getCategory("General".toLowerCase()))); + list.add(new ConfigElement(ConfigHandler.getConfig().getCategory("Rituals".toLowerCase()))); return list; } diff --git a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockRitualHome.java b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockRitualController.java similarity index 82% rename from src/main/java/WayofTime/bloodmagic/item/block/ItemBlockRitualHome.java rename to src/main/java/WayofTime/bloodmagic/item/block/ItemBlockRitualController.java index fe5ece0c..8d9be4dd 100644 --- a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockRitualHome.java +++ b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockRitualController.java @@ -5,9 +5,9 @@ import net.minecraft.block.Block; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; -public class ItemBlockRitualHome extends ItemBlock { +public class ItemBlockRitualController extends ItemBlock { - public ItemBlockRitualHome(Block block) { + public ItemBlockRitualController(Block block) { super(block); setHasSubtypes(true); diff --git a/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java b/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java index d524d510..72c4a7b4 100644 --- a/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java +++ b/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java @@ -1,7 +1,12 @@ package WayofTime.bloodmagic.proxy; +import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.registry.ModBlocks; import WayofTime.bloodmagic.registry.ModItems; +import WayofTime.bloodmagic.util.helper.InventoryRenderHelper; +import net.minecraft.client.resources.model.ModelResourceLocation; +import net.minecraftforge.client.model.ModelLoader; +import net.minecraftforge.client.model.obj.OBJLoader; public class ClientProxy extends CommonProxy { @@ -9,6 +14,9 @@ public class ClientProxy extends CommonProxy { public void preInit() { ModBlocks.initRenders(); ModItems.initRenders(); + + OBJLoader.instance.addDomain(BloodMagic.MODID); + ModelLoader.setCustomModelResourceLocation(InventoryRenderHelper.getItemFromBlock(ModBlocks.altar), 0, new ModelResourceLocation(BloodMagic.DOMAIN + "BlockAltar", "inventory")); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java index 089a8bee..a4318533 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java @@ -7,7 +7,9 @@ import WayofTime.bloodmagic.block.BlockBloodRune; import WayofTime.bloodmagic.block.BlockLifeEssence; import WayofTime.bloodmagic.block.BlockRitualController; import WayofTime.bloodmagic.item.block.ItemBlockBloodRune; -import WayofTime.bloodmagic.item.block.ItemBlockRitualHome; +import WayofTime.bloodmagic.item.block.ItemBlockRitualController; +import WayofTime.bloodmagic.tile.TileImperfectRitualStone; +import WayofTime.bloodmagic.tile.TileMasterRitualStone; import WayofTime.bloodmagic.util.helper.InventoryRenderHelper; import net.minecraft.block.Block; import net.minecraft.item.ItemBlock; @@ -32,14 +34,15 @@ public class ModBlocks altar = registerBlock(new BlockAltar()); blood_rune = registerBlock(new BlockBloodRune(), ItemBlockBloodRune.class); - ritualStone = registerBlock(new BlockRitualController(), ItemBlockRitualHome.class); + ritualStone = registerBlock(new BlockRitualController(), ItemBlockRitualController.class); initTiles(); } public static void initTiles() { - + GameRegistry.registerTileEntity(TileImperfectRitualStone.class, BloodMagic.MODID + ":" + TileImperfectRitualStone.class.getSimpleName()); + GameRegistry.registerTileEntity(TileMasterRitualStone.class, BloodMagic.MODID + ":" + TileMasterRitualStone.class.getSimpleName()); } public static void initRenders() diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModRituals.java b/src/main/java/WayofTime/bloodmagic/registry/ModRituals.java new file mode 100644 index 00000000..94dd8e15 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/registry/ModRituals.java @@ -0,0 +1,19 @@ +package WayofTime.bloodmagic.registry; + +import WayofTime.bloodmagic.api.registry.ImperfectRitualRegistry; +import WayofTime.bloodmagic.api.ritual.imperfect.ImperfectRitual; +import WayofTime.bloodmagic.ritual.imperfect.ImperfectRitualNight; + +public class ModRituals { + + public static ImperfectRitual imperfectNight; + + public static void initRituals() { + + } + + public static void initImperfectRituals() { + imperfectNight = new ImperfectRitualNight(); + ImperfectRitualRegistry.registerRitual(imperfectNight, imperfectNight.getName()); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/imperfect/ImperfectRitualNight.java b/src/main/java/WayofTime/bloodmagic/ritual/imperfect/ImperfectRitualNight.java new file mode 100644 index 00000000..5a06dd2c --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/ritual/imperfect/ImperfectRitualNight.java @@ -0,0 +1,29 @@ +package WayofTime.bloodmagic.ritual.imperfect; + +import WayofTime.bloodmagic.api.BlockStack; +import WayofTime.bloodmagic.api.ritual.imperfect.IImperfectRitualStone; +import WayofTime.bloodmagic.api.ritual.imperfect.ImperfectRitual; +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; + +public class ImperfectRitualNight extends ImperfectRitual { + + public ImperfectRitualNight() { + super("night", new BlockStack(Blocks.lapis_block), 5000, true); + } + + @Override + public boolean onActivate(IImperfectRitualStone imperfectRitualStone, EntityPlayer player) { + + boolean retFlag = false; + + if (!imperfectRitualStone.getWorld().isRemote) { + imperfectRitualStone.getWorld().addWeatherEffect(new EntityLightningBolt(imperfectRitualStone.getWorld(), imperfectRitualStone.getPos().getX(), imperfectRitualStone.getPos().getY() + 2, imperfectRitualStone.getPos().getZ())); + imperfectRitualStone.getWorld().setWorldTime((imperfectRitualStone.getWorld().getWorldTime() / 24000) * 24000 + 13800); + retFlag = true; + } + + return retFlag; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileImperfectRitualStone.java b/src/main/java/WayofTime/bloodmagic/tile/TileImperfectRitualStone.java new file mode 100644 index 00000000..8b4b47fd --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/tile/TileImperfectRitualStone.java @@ -0,0 +1,41 @@ +package WayofTime.bloodmagic.tile; + +import WayofTime.bloodmagic.api.registry.ImperfectRitualRegistry; +import WayofTime.bloodmagic.api.ritual.imperfect.IImperfectRitualStone; +import WayofTime.bloodmagic.api.ritual.imperfect.ImperfectRitual; +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockPos; +import net.minecraft.world.World; + +public class TileImperfectRitualStone extends TileEntity implements IImperfectRitualStone { + + public TileImperfectRitualStone() { + + } + + // IImperfectRitualStone + + @Override + public boolean performRitual(World world, BlockPos pos, ImperfectRitual imperfectRitual, EntityPlayer player) { + + if (imperfectRitual != null && ImperfectRitualRegistry.ritualEnabled(imperfectRitual)) { + System.out.println(imperfectRitual.toString()); + NetworkHelper.getSoulNetwork(player.getDisplayNameString(), world).syphonAndDamage(imperfectRitual.getActivationCost()); + return imperfectRitual.onActivate(this, player); + } + + return false; + } + + @Override + public World getWorld() { + return super.getWorld(); + } + + @Override + public BlockPos getPos() { + return super.getPos(); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java b/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java index 16be1921..477216e3 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java @@ -5,9 +5,9 @@ import WayofTime.bloodmagic.api.event.RitualEvent; import WayofTime.bloodmagic.api.network.SoulNetwork; import WayofTime.bloodmagic.api.registry.RitualRegistry; import WayofTime.bloodmagic.api.ritual.IMasterRitualStone; -import WayofTime.bloodmagic.api.ritual.LocalRitualStorage; import WayofTime.bloodmagic.api.ritual.Ritual; import WayofTime.bloodmagic.api.util.helper.NetworkHelper; +import WayofTime.bloodmagic.api.util.helper.RitualHelper; import WayofTime.bloodmagic.item.ItemActivationCrystal; import WayofTime.bloodmagic.util.ChatUtil; import com.google.common.base.Strings; @@ -35,9 +35,6 @@ public class TileMasterRitualStone extends TileEntity implements IMasterRitualSt private Ritual currentRitual; private EnumFacing direction; - public LocalRitualStorage storage; - public NBTTagCompound customTag; - public TileMasterRitualStone() { } @@ -59,23 +56,28 @@ public class TileMasterRitualStone extends TileEntity implements IMasterRitualSt } - public void activateRitual(ItemStack activationCrystal, EntityPlayer activator) { + @Override + public boolean activateRitual(ItemStack activationCrystal, EntityPlayer activator) { activationCrystal = NBTHolder.checkNBT(activationCrystal); String crystalOwner = activationCrystal.getTagCompound().getString(NBTHolder.NBT_OWNER); - Ritual ritual = null; + Ritual ritual = RitualRegistry.getRitualForId(""); - if (!Strings.isNullOrEmpty(crystalOwner)) { + if (!Strings.isNullOrEmpty(crystalOwner) && ritual != null) { if (activationCrystal.getItem() instanceof ItemActivationCrystal) { int crystalLevel = ((ItemActivationCrystal) activationCrystal.getItem()).getCrystalLevel(activationCrystal); + if (RitualHelper.canCrystalActivate(ritual, crystalLevel)) { - RitualEvent.RitualActivatedEvent event = new RitualEvent.RitualActivatedEvent(this, crystalOwner, ritual, activator, activationCrystal, crystalLevel); + RitualEvent.RitualActivatedEvent event = new RitualEvent.RitualActivatedEvent(this, crystalOwner, ritual, activator, activationCrystal, crystalLevel); - if (MinecraftForge.EVENT_BUS.post(event) || event.getResult() == Event.Result.DENY) { - ChatUtil.sendNoSpamUnloc(activator, "chat.BloodMagic.ritual.prevent"); - return; + if (MinecraftForge.EVENT_BUS.post(event) || event.getResult() == Event.Result.DENY) { + ChatUtil.sendNoSpamUnloc(activator, "chat.BloodMagic.ritual.prevent"); + return false; + } } } } + + return false; } @Override @@ -87,6 +89,11 @@ public class TileMasterRitualStone extends TileEntity implements IMasterRitualSt } } + @Override + public void stopRitual() { + + } + @Override public void setCooldown(int cooldown) { this.cooldown = cooldown; @@ -107,16 +114,6 @@ public class TileMasterRitualStone extends TileEntity implements IMasterRitualSt return direction; } - @Override - public NBTTagCompound getCustomRitualTag() { - return customTag; - } - - @Override - public void setCustomRitualTag(NBTTagCompound tag) { - this.customTag = tag; - } - @Override public boolean areTanksEmpty() { return false; @@ -127,16 +124,6 @@ public class TileMasterRitualStone extends TileEntity implements IMasterRitualSt return activeTime; } - @Override - public LocalRitualStorage getLocalStorage() { - return storage; - } - - @Override - public void setLocalStorage(LocalRitualStorage storage) { - this.storage = storage; - } - @Override public String getOwner() { return owner; diff --git a/src/main/resources/assets/bloodmagic/blockstates/BlockAltar.json b/src/main/resources/assets/bloodmagic/blockstates/BlockAltar.json new file mode 100644 index 00000000..521d6b89 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/BlockAltar.json @@ -0,0 +1,27 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { }, + "model": "bloodmagic:BlockAltar.obj", + "custom": { "flip-v": true }, + "transform": { + "translation": [ 0.05, -0.5, 0.05 ], + "scale": [ 0.1, 0.1, 0.1 ] + } + }, + "variants": { + "normal": [{ + + }], + "inventory": [{ + "transform": { + "translation": [ 0.05, -0.1, 0.05 ], + "scale": [ 0.07, 0.07, 0.07 ], + "gui": { + "translation": [ 0, -0.15, -0.03 ], + "scale": [ 1.04, 1.04, 1.04 ] + } + } + }] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/BlockAltar.mtl b/src/main/resources/assets/bloodmagic/models/block/BlockAltar.mtl new file mode 100644 index 00000000..187edbd0 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/BlockAltar.mtl @@ -0,0 +1,13 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl Material__46 +Ns 96.078431 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.000000 +d 1.000000 +illum 2 +map_Kd bloodmagic:models/altar diff --git a/src/main/resources/assets/bloodmagic/models/block/BlockAltar.obj b/src/main/resources/assets/bloodmagic/models/block/BlockAltar.obj new file mode 100644 index 00000000..6c805050 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/BlockAltar.obj @@ -0,0 +1,238 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib BlockAltar.mtl +o headusOBJexport002 +v -4.500000 0.499699 7.000000 +v 4.500000 0.499699 7.000000 +v 4.017200 8.499999 6.248302 +v -4.017200 8.499999 6.248302 +v 6.937900 0.499699 4.499400 +v 7.019900 0.499701 -4.499800 +v 6.260000 8.500001 -4.017699 +v 6.186800 8.500000 4.015902 +v -4.017200 8.500001 -6.249599 +v 4.017200 8.500001 -6.249599 +v 4.500000 0.499701 -7.000000 +v -4.500000 0.499701 -7.000000 +v -6.248900 8.500000 4.016501 +v -6.248900 8.500001 -4.062199 +v -7.000000 0.499701 -4.549700 +v -7.000000 0.499699 4.500000 +v -5.643700 0.499701 -7.721900 +v -7.698300 0.499701 -5.708200 +v -6.996700 8.500001 -5.252799 +v -5.192700 8.500001 -7.020998 +v -5.200200 8.499999 7.007902 +v -7.008600 8.499999 5.199602 +v -7.710200 0.499699 5.651200 +v -5.651300 0.499699 7.710100 +v 5.651300 0.499699 7.710100 +v 7.710200 0.499699 5.651200 +v 7.008600 8.499999 5.199602 +v 5.200200 8.499999 7.007902 +v 7.710200 0.499701 -5.651300 +v 5.651300 0.499701 -7.710200 +v 5.200300 8.500001 -7.009199 +v 7.008600 8.500001 -5.200899 +v 1.791200 8.500000 3.281701 +v -1.791000 8.500000 3.281701 +v 3.285700 8.500000 -1.794999 +v 3.285700 8.500000 1.787201 +v -1.790600 8.500001 -3.289699 +v 1.791200 8.500001 -3.289499 +v -3.285500 8.500000 1.787201 +v -3.285300 8.500000 -1.814699 +v -1.284500 7.000000 2.059001 +v -1.288900 7.000000 -2.066799 +v -2.062600 7.000000 -1.303299 +v -2.062700 7.000000 1.280801 +v 1.284600 7.000000 2.059001 +v 2.062900 7.000000 1.280801 +v 2.062900 7.000000 -1.288499 +v 1.284700 7.000000 -2.066699 +vt -0.000000 0.265600 +vt 0.203100 0.265600 +vt 0.203100 0.500000 +vt 0.000000 0.500000 +vt 0.390600 0.265600 +vt 0.593800 0.265600 +vt 0.593800 0.500000 +vt 0.390600 0.500000 +vt 0.203100 0.234400 +vt -0.000000 0.234400 +vt -0.000000 0.000000 +vt 0.203100 0.000000 +vt 0.593800 0.234400 +vt 0.390600 0.234400 +vt 0.390600 -0.000000 +vt 0.593800 0.000000 +vt 0.250000 0.000000 +vt 0.343800 0.000000 +vt 0.343800 0.234400 +vt 0.250000 0.234400 +vt 0.734400 0.234400 +vt 0.640600 0.234400 +vt 0.640600 0.000000 +vt 0.734400 -0.000000 +vt 0.250000 0.265600 +vt 0.343800 0.265600 +vt 0.343800 0.500000 +vt 0.250000 0.500000 +vt 0.640600 0.265600 +vt 0.734400 0.265600 +vt 0.734400 0.500000 +vt 0.640600 0.500000 +vt 0.093800 0.578100 +vt 0.031300 0.640600 +vt 0.000000 0.609400 +vt 0.062500 0.546900 +vt 0.031300 0.906300 +vt 0.093800 0.968800 +vt 0.062500 1.000000 +vt 0.000000 0.937500 +vt 0.375000 0.968800 +vt 0.437500 0.906300 +vt 0.468800 0.937500 +vt 0.406300 1.000000 +vt 0.437500 0.640600 +vt 0.375000 0.578100 +vt 0.406300 0.546900 +vt 0.468800 0.609400 +vt 0.909700 0.627000 +vt 0.852200 0.704200 +vt 0.759300 0.704500 +vt 0.701200 0.627800 +vt 0.968900 0.893100 +vt 0.891500 0.835700 +vt 0.891100 0.742800 +vt 0.966200 0.684700 +vt 0.702500 0.952000 +vt 0.760000 0.875000 +vt 0.852900 0.874700 +vt 0.910900 0.951200 +vt 0.643600 0.685900 +vt 0.720700 0.743500 +vt 0.721000 0.836900 +vt 0.644400 0.895500 +vt 0.988400 0.923700 +vt 0.941700 0.970800 +vt 0.781300 0.265600 +vt 0.781300 0.500000 +vt 0.672100 0.972200 +vt 0.625100 0.926500 +vt 0.623700 0.655300 +vt 0.670500 0.608200 +vt 0.781300 -0.000000 +vt 0.781300 0.234400 +vt 0.940300 0.607200 +vt 0.987400 0.653900 +vt 0.772500 0.736200 +vt 0.772800 0.843200 +vt 0.752700 0.823500 +vt 0.752400 0.756500 +vt 0.839200 0.736000 +vt 0.859500 0.756100 +vt 0.859700 0.822700 +vt 0.839600 0.843000 +vn 0.000000 0.093500 0.995600 +vn 0.995500 0.094000 0.009100 +vn 0.000000 0.093400 -0.995600 +vn -0.995600 0.093500 0.000000 +vn -0.101800 -0.554900 -0.825700 +vn -0.823200 -0.555100 -0.118900 +vn -0.990700 0.094300 -0.098300 +vn -0.076900 0.091300 -0.992800 +vn -0.088200 0.093800 0.991700 +vn -0.991900 0.091900 0.087200 +vn -0.824800 -0.554700 0.109900 +vn -0.110600 -0.555300 0.824300 +vn 0.109900 -0.554700 0.824800 +vn 0.827400 -0.553300 0.096000 +vn 0.993300 0.092700 0.069000 +vn 0.087200 0.092000 0.991900 +vn 0.823800 -0.555200 -0.114500 +vn 0.110600 -0.555300 -0.824300 +vn 0.088200 0.093700 -0.991700 +vn 0.991600 0.092100 -0.090800 +vn 0.223200 -0.908300 -0.353700 +vn -0.359200 -0.907600 0.217500 +vn -0.356900 -0.907800 -0.220200 +vn 0.220600 -0.908000 0.356100 +vn -0.220100 -0.907800 0.356900 +vn 0.343700 -0.910100 -0.231300 +vn 0.361700 -0.906700 0.216800 +vn -0.220600 -0.908000 -0.356100 +vn 0.000000 1.000000 0.000000 +vn -0.538100 0.043900 0.841700 +vn 0.546500 0.042800 -0.836400 +vn -0.841700 0.043800 -0.538100 +vn -0.539700 0.046300 -0.840600 +vn 0.845600 0.044700 0.531900 +vn -0.845900 0.047000 0.531300 +vn 0.539700 0.046400 0.840600 +vn 0.187200 0.872200 -0.452000 +vn 0.185600 0.872300 0.452300 +vn 0.451600 0.872000 0.188800 +vn 0.452000 0.872200 -0.187200 +vn -0.187200 0.872200 -0.452000 +vn 0.287000 0.661600 -0.692800 +vn -0.287000 0.661600 -0.692800 +vn -0.451900 0.872200 -0.187200 +vn -0.692800 0.661600 -0.286900 +vn -0.451900 0.872200 0.187200 +vn -0.692800 0.661600 0.286900 +vn -0.187200 0.872200 0.451900 +vn -0.287000 0.661600 0.692700 +vn 0.284800 0.661100 0.694100 +vn 0.691400 0.662100 0.289100 +vn 0.692800 0.661600 -0.286900 +vn 0.820700 0.042600 -0.569800 +usemtl Material__46 +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +f 9/9/3 10/10/3 11/11/3 12/12/3 +f 13/13/4 14/14/4 15/15/4 16/16/4 +s 1 +f 17/17/5 18/18/6 19/19/7 20/20/8 +f 21/21/9 22/22/10 23/23/11 24/24/12 +f 25/25/13 26/26/14 27/27/15 28/28/16 +f 29/29/17 30/30/18 31/31/19 32/32/20 +f 12/33/21 15/34/22 18/35/6 17/36/5 +f 16/37/23 1/38/24 24/39/12 23/40/11 +f 2/41/25 5/42/26 26/43/14 25/44/13 +f 6/45/27 11/46/28 30/47/18 29/48/17 +f 3/49/29 33/50/29 34/51/29 4/52/29 +f 7/53/29 35/54/29 36/55/29 8/56/29 +f 9/57/29 37/58/29 38/59/29 10/60/29 +f 13/61/29 39/62/29 40/63/29 14/64/29 +f 9/57/29 14/64/29 40/63/29 37/58/29 +f 4/52/29 34/51/29 39/62/29 13/61/29 +f 8/56/29 36/55/29 33/50/29 3/49/29 +f 10/60/29 38/59/29 35/54/29 7/53/29 +f 25/25/13 28/28/16 3/3/30 2/2/25 +f 10/60/29 7/53/29 32/65/29 31/66/29 +f 17/17/5 20/20/8 9/9/31 12/12/21 +f 23/23/11 22/22/10 13/13/32 16/16/23 +f 11/67/28 10/68/33 31/31/19 30/30/18 +f 29/29/17 32/32/20 7/7/34 6/6/27 +f 14/64/29 9/57/29 20/69/29 19/70/29 +f 15/15/22 14/14/35 19/19/7 18/18/6 +f 4/52/29 13/61/29 22/71/29 21/72/29 +f 1/73/24 4/74/36 21/21/9 24/24/12 +f 8/56/29 3/49/29 28/75/29 27/76/29 +f 41/77/37 42/78/38 43/79/39 44/80/40 +f 45/81/41 41/77/37 34/51/42 33/50/43 +f 46/82/44 45/81/41 33/50/43 36/55/45 +f 47/83/46 46/82/44 36/55/45 35/54/47 +f 48/84/48 47/83/46 35/54/47 38/59/49 +f 42/78/38 48/84/48 38/59/49 37/58/50 +f 43/79/39 42/78/38 37/58/50 40/63/51 +f 44/80/40 43/79/39 40/63/51 39/62/52 +f 41/77/37 44/80/40 39/62/52 34/51/42 +f 48/84/48 45/81/41 46/82/44 47/83/46 +f 45/81/41 48/84/48 42/78/38 41/77/37 +f 16/37/23 15/34/22 12/33/21 1/38/24 +f 2/41/25 11/46/28 6/45/27 5/42/26 +f 11/46/28 2/41/25 1/38/24 12/33/21 +f 5/5/26 8/8/53 27/27/15 26/26/14