From a97abd26d0f9945392537f5c56b350bde13bef8b Mon Sep 17 00:00:00 2001 From: Electroblob77 <35599699+Electroblob77@users.noreply.github.com> Date: Mon, 11 May 2020 18:42:00 +0100 Subject: [PATCH] Add receptacles --- .../wizardry/block/BlockReceptacle.java | 211 ++++++++++++++ .../wizardry/client/model/WizardryModels.java | 9 +- .../wizardry/registry/WizardryBlocks.java | 7 +- .../wizardry/registry/WizardryItems.java | 2 + .../wizardry/registry/WizardrySounds.java | 2 + .../tileentity/TileEntityReceptacle.java | 61 ++++ .../ebwizardry/blockstates/receptacle.json | 9 + .../assets/ebwizardry/lang/en_gb.lang | 2 + .../assets/ebwizardry/lang/en_us.lang | 2 + .../ebwizardry/models/block/receptacle.json | 262 ++++++++++++++++++ .../models/block/wall_receptacle.json | 238 ++++++++++++++++ .../ebwizardry/models/item/receptacle.json | 3 + .../resources/assets/ebwizardry/sounds.json | 1 + .../ebwizardry/textures/blocks/receptacle.png | Bin 0 -> 6729 bytes .../textures/blocks/wall_receptacle.png | Bin 0 -> 6387 bytes 15 files changed, 803 insertions(+), 6 deletions(-) create mode 100644 src/main/java/electroblob/wizardry/block/BlockReceptacle.java create mode 100644 src/main/java/electroblob/wizardry/tileentity/TileEntityReceptacle.java create mode 100644 src/main/resources/assets/ebwizardry/blockstates/receptacle.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/receptacle.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/wall_receptacle.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/receptacle.json create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/receptacle.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/wall_receptacle.png diff --git a/src/main/java/electroblob/wizardry/block/BlockReceptacle.java b/src/main/java/electroblob/wizardry/block/BlockReceptacle.java new file mode 100644 index 00000000..72983785 --- /dev/null +++ b/src/main/java/electroblob/wizardry/block/BlockReceptacle.java @@ -0,0 +1,211 @@ +package electroblob.wizardry.block; + +import com.google.common.collect.Maps; +import electroblob.wizardry.constants.Element; +import electroblob.wizardry.item.ItemSpectralDust; +import electroblob.wizardry.registry.WizardryItems; +import electroblob.wizardry.registry.WizardrySounds; +import electroblob.wizardry.registry.WizardryTabs; +import electroblob.wizardry.tileentity.TileEntityReceptacle; +import electroblob.wizardry.util.ParticleBuilder; +import electroblob.wizardry.util.WizardryUtilities; +import net.minecraft.block.BlockTorch; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import javax.annotation.Nullable; +import java.util.Map; +import java.util.Random; + +public class BlockReceptacle extends BlockTorch implements ITileEntityProvider { + + protected static final AxisAlignedBB STANDING_AABB = new AxisAlignedBB(4/16d, 0/16d, 4/16d, 12/16d, 8/16d, 12/16d); + protected static final AxisAlignedBB NORTH_WALL_AABB = new AxisAlignedBB(4/16d, 2/16d, 7/16d, 12/16d, 10/16d, 16/16d); + protected static final AxisAlignedBB SOUTH_WALL_AABB = new AxisAlignedBB(4/16d, 2/16d, 0/16d, 12/16d, 10/16d, 9/16d); + protected static final AxisAlignedBB WEST_WALL_AABB = new AxisAlignedBB(7/16d, 2/16d, 4/16d, 16/16d, 10/16d, 12/16d); + protected static final AxisAlignedBB EAST_WALL_AABB = new AxisAlignedBB(0/16d, 2/16d, 4/16d, 9/16d, 10/16d, 12/16d); + + private static final double WALL_PARTICLE_OFFSET = 3/16d; + + private static final Map PARTICLE_COLOURS; + + static { + + Map map = Maps.newEnumMap(Element.class); + + map.put(Element.MAGIC, new int[]{0xe4c7cd, 0xfeffbe, 0x9d2cf3}); + map.put(Element.FIRE, new int[]{0xff9600, 0xfffe67, 0xd02700}); + map.put(Element.ICE, new int[]{0xa3e8f4, 0xe9f9fc, 0x138397}); + map.put(Element.LIGHTNING, new int[]{0x409ee1, 0xf5f0ff, 0x225474}); + map.put(Element.NECROMANCY, new int[]{0xa811ce, 0xf575f5, 0x382366}); + map.put(Element.EARTH, new int[]{0xa8f408, 0xc8ffb2, 0x795c28}); + map.put(Element.SORCERY, new int[]{0x56e8e3, 0xe8fcfc, 0x16a64d}); + map.put(Element.HEALING, new int[]{0xfff69e, 0xfffff6, 0xa18200}); + + PARTICLE_COLOURS = Maps.immutableEnumMap(map); + } + + public BlockReceptacle(){ + super(); + this.setCreativeTab(WizardryTabs.WIZARDRY); + this.setHardness(0); + this.setLightLevel(0.5f); + this.setSoundType(SoundType.STONE); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess world, BlockPos pos){ + switch(state.getValue(FACING)){ + case EAST: return EAST_WALL_AABB; + case WEST: return WEST_WALL_AABB; + case SOUTH: return SOUTH_WALL_AABB; + case NORTH: return NORTH_WALL_AABB; + default: return STANDING_AABB; + } + } + + @Override + public AxisAlignedBB getCollisionBoundingBox(IBlockState state, IBlockAccess world, BlockPos pos){ + return state.getBoundingBox(world, pos); + } + + @Override + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos){ + + TileEntity tileEntity = world.getTileEntity(pos); + + if(tileEntity instanceof TileEntityReceptacle && ((TileEntityReceptacle)tileEntity).getElement() != null){ + return super.getLightValue(state, world, pos); // Return super to use float value from constructor + } + + return 0; + } + + @Override + public void getDrops(NonNullList drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune){ + + super.getDrops(drops, world, pos, state, fortune); + + TileEntity tileEntity = world.getTileEntity(pos); + + if(tileEntity instanceof TileEntityReceptacle){ + Element element = ((TileEntityReceptacle)tileEntity).getElement(); + if(element != null) drops.add(new ItemStack(WizardryItems.spectral_dust, 1, element.ordinal())); + } + } + + // See BlockFlowerPot for these two (this class is essentially based on a flower pot) + + @Override + public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest){ + if(willHarvest) return true; // If it will harvest, delay deletion of the block until after getDrops + return super.removedByPlayer(state, world, pos, player, willHarvest); + } + + @Override + public void harvestBlock(World world, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, ItemStack tool){ + super.harvestBlock(world, player, pos, state, te, tool); + world.setBlockToAir(pos); + } + + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ + + TileEntity tileEntity = world.getTileEntity(pos); + + ItemStack stack = player.getHeldItem(hand); + + if(tileEntity instanceof TileEntityReceptacle){ + + Element currentElement = ((TileEntityReceptacle)tileEntity).getElement(); + + if(currentElement == null){ + + if(stack.getItem() instanceof ItemSpectralDust && stack.getMetadata() >= 0 + && stack.getMetadata() < Element.values().length){ + + ((TileEntityReceptacle)tileEntity).setElement(Element.values()[stack.getMetadata()]); + if(!player.capabilities.isCreativeMode) stack.shrink(1); + world.playSound(pos.getX(), pos.getY(), pos.getZ(), WizardrySounds.BLOCK_RECEPTACLE_IGNITE, + SoundCategory.BLOCKS, 0.7f, 0.7f, false); + world.checkLight(pos); + return true; + } + + }else{ + + ((TileEntityReceptacle)tileEntity).setElement(null); + + ItemStack dust = new ItemStack(WizardryItems.spectral_dust, 1, currentElement.ordinal()); + + if(stack.isEmpty()){ + player.setHeldItem(hand, dust); + }else if(!player.addItemStackToInventory(dust)){ + player.dropItem(dust, false); + } + + world.checkLight(pos); + return true; + } + } + + return super.onBlockActivated(world, pos, state, player, hand, facing, hitX, hitY, hitZ); + } + + @Override + public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rand){ + + TileEntity tileEntity = world.getTileEntity(pos); + + if(tileEntity instanceof TileEntityReceptacle){ + + Element element = ((TileEntityReceptacle)tileEntity).getElement(); + + if(element != null){ + + EnumFacing facing = state.getValue(FACING).getOpposite(); + + Vec3d centre = WizardryUtilities.getCentre(pos); + if(facing.getAxis().isHorizontal()){ + centre = centre.add(new Vec3d(facing.getDirectionVec()).scale(WALL_PARTICLE_OFFSET)).add(0, 0.125, 0); + } + + int[] colours = PARTICLE_COLOURS.get(element); + + ParticleBuilder.create(ParticleBuilder.Type.FLASH).pos(centre).scale(0.35f).time(48).clr(colours[0]).spawn(world); + + double r = 0.12; + + for(int i = 0; i < 3; i++){ + + double x = r * (rand.nextDouble() * 2 - 1); + double y = r * (rand.nextDouble() * 2 - 1); + double z = r * (rand.nextDouble() * 2 - 1); + + ParticleBuilder.create(ParticleBuilder.Type.DUST).pos(centre.x + x, centre.y + y, centre.z + z) + .vel(x * -0.03, 0.02, z * -0.03).time(24 + rand.nextInt(8)).clr(colours[1]).fade(colours[2]).spawn(world); + } + } + } + } + + @Nullable + @Override + public TileEntity createNewTileEntity(World world, int meta){ + return new TileEntityReceptacle(); + } + +} diff --git a/src/main/java/electroblob/wizardry/client/model/WizardryModels.java b/src/main/java/electroblob/wizardry/client/model/WizardryModels.java index 5dc88bc8..84a3aa9f 100644 --- a/src/main/java/electroblob/wizardry/client/model/WizardryModels.java +++ b/src/main/java/electroblob/wizardry/client/model/WizardryModels.java @@ -7,23 +7,20 @@ import electroblob.wizardry.block.BlockRunestone; import electroblob.wizardry.item.IMultiTexturedItem; import electroblob.wizardry.item.ItemBlockMultiTextured; import electroblob.wizardry.item.ItemCrystal; +import electroblob.wizardry.item.ItemSpectralDust; import electroblob.wizardry.registry.WizardryBlocks; import electroblob.wizardry.registry.WizardryItems; import net.minecraft.block.BlockPlanks; -import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.model.IBakedModel; import net.minecraft.client.renderer.block.model.ModelBakery; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.block.statemap.StateMap; -import net.minecraft.client.renderer.block.statemap.StateMapperBase; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; -import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.event.ModelBakeEvent; import net.minecraftforge.client.event.ModelRegistryEvent; -import net.minecraftforge.client.event.TextureStitchEvent; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.client.model.ModelLoaderRegistry; import net.minecraftforge.fml.common.Mod; @@ -91,6 +88,8 @@ public final class WizardryModels { registerItemModel(Item.getItemFromBlock(WizardryBlocks.acacia_lectern)); registerItemModel(Item.getItemFromBlock(WizardryBlocks.dark_oak_lectern)); + registerItemModel(Item.getItemFromBlock(WizardryBlocks.receptacle)); + // Items registerMultiTexturedModel((ItemCrystal)WizardryItems.magic_crystal); @@ -179,6 +178,8 @@ public final class WizardryModels { registerItemModel(WizardryItems.magic_silk); + registerMultiTexturedModel((ItemSpectralDust)WizardryItems.spectral_dust); + registerItemModel(WizardryItems.wizard_hat); registerItemModel(WizardryItems.wizard_robe); registerItemModel(WizardryItems.wizard_leggings); diff --git a/src/main/java/electroblob/wizardry/registry/WizardryBlocks.java b/src/main/java/electroblob/wizardry/registry/WizardryBlocks.java index 6bbccd46..b126b19c 100644 --- a/src/main/java/electroblob/wizardry/registry/WizardryBlocks.java +++ b/src/main/java/electroblob/wizardry/registry/WizardryBlocks.java @@ -4,8 +4,6 @@ import electroblob.wizardry.Wizardry; import electroblob.wizardry.block.*; import electroblob.wizardry.tileentity.*; import net.minecraft.block.Block; -import net.minecraft.block.BlockPlanks; -import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.util.ResourceLocation; import net.minecraftforge.event.RegistryEvent; @@ -77,6 +75,8 @@ public final class WizardryBlocks { public static final Block acacia_lectern = placeholder(); public static final Block dark_oak_lectern = placeholder(); + public static final Block receptacle = placeholder(); + /** * Sets both the registry and unlocalised names of the given block, then registers it with the given registry. Use * this instead of {@link Block#setRegistryName(String)} and {@link Block#setTranslationKey(String)} during @@ -134,6 +134,8 @@ public final class WizardryBlocks { registerBlock(registry, "acacia_lectern", new BlockLectern()); registerBlock(registry, "dark_oak_lectern", new BlockLectern()); + registerBlock(registry, "receptacle", new BlockReceptacle()); + } /** Called from the preInit method in the main mod class to register all the tile entities. */ @@ -148,5 +150,6 @@ public final class WizardryBlocks { GameRegistry.registerTileEntity(TileEntityShrineCore.class, new ResourceLocation(Wizardry.MODID, "shrine_core")); GameRegistry.registerTileEntity(TileEntityBookshelf.class, new ResourceLocation(Wizardry.MODID, "bookshelf")); GameRegistry.registerTileEntity(TileEntityLectern.class, new ResourceLocation(Wizardry.MODID, "lectern")); + GameRegistry.registerTileEntity(TileEntityReceptacle.class, new ResourceLocation(Wizardry.MODID, "receptacle")); } } \ No newline at end of file diff --git a/src/main/java/electroblob/wizardry/registry/WizardryItems.java b/src/main/java/electroblob/wizardry/registry/WizardryItems.java index bc998db7..a8e47661 100644 --- a/src/main/java/electroblob/wizardry/registry/WizardryItems.java +++ b/src/main/java/electroblob/wizardry/registry/WizardryItems.java @@ -416,6 +416,8 @@ public final class WizardryItems { registerItemBlock(registry, WizardryBlocks.acacia_lectern); registerItemBlock(registry, WizardryBlocks.dark_oak_lectern); + registerItemBlock(registry, WizardryBlocks.receptacle); + // Items registerItem(registry, "magic_crystal", new ItemCrystal()); diff --git a/src/main/java/electroblob/wizardry/registry/WizardrySounds.java b/src/main/java/electroblob/wizardry/registry/WizardrySounds.java index 95c01466..6b732c7b 100644 --- a/src/main/java/electroblob/wizardry/registry/WizardrySounds.java +++ b/src/main/java/electroblob/wizardry/registry/WizardrySounds.java @@ -29,6 +29,7 @@ public final class WizardrySounds { public static final SoundEvent BLOCK_PEDESTAL_ACTIVATE = createSound("block.pedestal.activate"); public static final SoundEvent BLOCK_PEDESTAL_CONQUER = createSound("block.pedestal.conquer"); public static final SoundEvent BLOCK_LECTERN_LOCATE_SPELL = createSound("block.lectern.locate_spell"); + public static final SoundEvent BLOCK_RECEPTACLE_IGNITE = createSound("block.receptacle.ignite"); public static final SoundEvent ITEM_WAND_SWITCH_SPELL = createSound("item.wand.switch_spell"); public static final SoundEvent ITEM_WAND_LEVELUP = createSound("item.wand.levelup"); @@ -156,6 +157,7 @@ public final class WizardrySounds { event.getRegistry().register(BLOCK_PEDESTAL_ACTIVATE); event.getRegistry().register(BLOCK_PEDESTAL_CONQUER); event.getRegistry().register(BLOCK_LECTERN_LOCATE_SPELL); + event.getRegistry().register(BLOCK_RECEPTACLE_IGNITE); event.getRegistry().register(ITEM_WAND_SWITCH_SPELL); event.getRegistry().register(ITEM_WAND_LEVELUP); diff --git a/src/main/java/electroblob/wizardry/tileentity/TileEntityReceptacle.java b/src/main/java/electroblob/wizardry/tileentity/TileEntityReceptacle.java new file mode 100644 index 00000000..064bfc9b --- /dev/null +++ b/src/main/java/electroblob/wizardry/tileentity/TileEntityReceptacle.java @@ -0,0 +1,61 @@ +package electroblob.wizardry.tileentity; + +import electroblob.wizardry.constants.Element; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; + +import javax.annotation.Nullable; + +public class TileEntityReceptacle extends TileEntity { + + private Element element; + + public TileEntityReceptacle(){ + this(null); + } + + public TileEntityReceptacle(Element element){ + this.element = element; + } + + public Element getElement(){ + return element; + } + + public void setElement(Element element){ + this.element = element; + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound compound){ + super.writeToNBT(compound); + compound.setInteger("Element", element == null ? -1 : element.ordinal()); + return compound; + } + + @Override + public void readFromNBT(NBTTagCompound compound){ + super.readFromNBT(compound); + int i = compound.getInteger("Element"); + element = i == -1 ? null : Element.values()[i]; + } + + @Override + public NBTTagCompound getUpdateTag(){ + return this.writeToNBT(new NBTTagCompound()); + } + + @Nullable + @Override + public SPacketUpdateTileEntity getUpdatePacket(){ + return new SPacketUpdateTileEntity(pos, getBlockMetadata(), this.getUpdateTag()); + } + + @Override + public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt){ + readFromNBT(pkt.getNbtCompound()); + } + +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/receptacle.json b/src/main/resources/assets/ebwizardry/blockstates/receptacle.json new file mode 100644 index 00000000..d272bf0a --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/receptacle.json @@ -0,0 +1,9 @@ +{ + "variants": { + "facing=up": { "model": "ebwizardry:receptacle" }, + "facing=east": { "model": "ebwizardry:wall_receptacle", "y": 270 }, + "facing=south": { "model": "ebwizardry:wall_receptacle" }, + "facing=west": { "model": "ebwizardry:wall_receptacle", "y": 90 }, + "facing=north": { "model": "ebwizardry:wall_receptacle", "y": 180 } + } +} diff --git a/src/main/resources/assets/ebwizardry/lang/en_gb.lang b/src/main/resources/assets/ebwizardry/lang/en_gb.lang index 1cca607e..cee7452f 100644 --- a/src/main/resources/assets/ebwizardry/lang/en_gb.lang +++ b/src/main/resources/assets/ebwizardry/lang/en_gb.lang @@ -47,6 +47,8 @@ tile.ebwizardry\:jungle_lectern.name=Jungle Lectern tile.ebwizardry\:acacia_lectern.name=Acacia Lectern tile.ebwizardry\:dark_oak_lectern.name=Dark Oak Lectern +tile.ebwizardry\:receptacle.name=Receptacle + item.ebwizardry\:crystal_magic.name=Magic Crystal item.ebwizardry\:crystal_magic.desc=The iridescent colours of this crystal seem to slowly shift and swirl, hinting at a magical energy within. Perhaps this magic could be harnessed in some way? item.ebwizardry\:crystal_fire.name=Fiery Crystal diff --git a/src/main/resources/assets/ebwizardry/lang/en_us.lang b/src/main/resources/assets/ebwizardry/lang/en_us.lang index 66fafa64..f3e9bde0 100644 --- a/src/main/resources/assets/ebwizardry/lang/en_us.lang +++ b/src/main/resources/assets/ebwizardry/lang/en_us.lang @@ -47,6 +47,8 @@ tile.ebwizardry\:jungle_lectern.name=Jungle Lectern tile.ebwizardry\:acacia_lectern.name=Acacia Lectern tile.ebwizardry\:dark_oak_lectern.name=Dark Oak Lectern +tile.ebwizardry\:receptacle.name=Receptacle + item.ebwizardry\:crystal_magic.name=Magic Crystal item.ebwizardry\:crystal_magic.desc=The iridescent colors of this crystal seem to slowly shift and swirl, hinting at a magical energy within. Perhaps this magic could be harnessed, somehow... item.ebwizardry\:crystal_fire.name=Fiery Crystal diff --git a/src/main/resources/assets/ebwizardry/models/block/receptacle.json b/src/main/resources/assets/ebwizardry/models/block/receptacle.json new file mode 100644 index 00000000..b64a8d89 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/receptacle.json @@ -0,0 +1,262 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "ebwizardry:blocks/receptacle", + "particle": "ebwizardry:blocks/receptacle" + }, + "elements": [ + { + "from": [6, 6.5, 10], + "to": [10, 7.5, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 6.5, 12]}, + "faces": { + "north": {"uv": [1, 5, 5, 6], "texture": "#0"}, + "east": {"uv": [4, 5, 5, 6], "texture": "#0"}, + "south": {"uv": [1, 5, 5, 6], "texture": "#0"}, + "west": {"uv": [1, 5, 2, 6], "texture": "#0"}, + "up": {"uv": [1, 5, 5, 6], "texture": "#0"}, + "down": {"uv": [1, 5, 5, 6], "texture": "#0"} + } + }, + { + "from": [6, 5.5, 6], + "to": [10, 6.5, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6.5, 8]}, + "faces": { + "north": {"uv": [1, 7, 5, 8], "texture": "#0"}, + "east": {"uv": [1, 7, 5, 8], "texture": "#0"}, + "south": {"uv": [1, 7, 5, 8], "texture": "#0"}, + "west": {"uv": [1, 7, 5, 8], "texture": "#0"}, + "up": {"uv": [1, 1, 5, 5], "texture": "#0"}, + "down": {"uv": [1, 1, 5, 5], "texture": "#0"} + } + }, + { + "from": [5, 6.5, 6], + "to": [6, 7.5, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6.5, 8]}, + "faces": { + "north": {"uv": [0, 1, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 1, 1, 5], "rotation": 90, "texture": "#0"}, + "south": {"uv": [0, 4, 1, 5], "texture": "#0"}, + "west": {"uv": [0, 1, 1, 5], "rotation": 90, "texture": "#0"}, + "up": {"uv": [0, 1, 1, 5], "texture": "#0"}, + "down": {"uv": [0, 1, 1, 5], "texture": "#0"} + } + }, + { + "from": [6, 6.5, 5], + "to": [10, 7.5, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 6.5, 7]}, + "faces": { + "north": {"uv": [1, 0, 5, 1], "texture": "#0"}, + "east": {"uv": [4, 0, 5, 1], "texture": "#0"}, + "south": {"uv": [1, 0, 5, 1], "texture": "#0"}, + "west": {"uv": [1, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [1, 0, 5, 1], "texture": "#0"}, + "down": {"uv": [1, 0, 5, 1], "texture": "#0"} + } + }, + { + "from": [10, 6.5, 6], + "to": [11, 7.5, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 6.5, 8]}, + "faces": { + "north": {"uv": [5, 1, 6, 2], "texture": "#0"}, + "east": {"uv": [5, 1, 6, 5], "rotation": 90, "texture": "#0"}, + "south": {"uv": [5, 4, 6, 5], "texture": "#0"}, + "west": {"uv": [5, 1, 6, 5], "rotation": 90, "texture": "#0"}, + "up": {"uv": [5, 1, 6, 5], "texture": "#0"}, + "down": {"uv": [5, 1, 6, 5], "texture": "#0"} + } + }, + { + "from": [10, 2.5, 7.5], + "to": [11, 6.5, 8.5], + "rotation": {"angle": -45, "axis": "z", "origin": [11, 5, 8]}, + "faces": { + "north": {"uv": [15, 1, 16, 5], "texture": "#0"}, + "east": {"uv": [14, 1, 15, 5], "texture": "#0"}, + "south": {"uv": [13, 1, 14, 5], "texture": "#0"}, + "west": {"uv": [12, 1, 13, 5], "texture": "#0"}, + "down": {"uv": [13, 4, 14, 5], "texture": "#0"} + } + }, + { + "from": [11.06066, 6.06066, 7.5], + "to": [12.06066, 8.06066, 8.5], + "rotation": {"angle": 0, "axis": "y", "origin": [19.06066, 15.06066, 16]}, + "faces": { + "north": {"uv": [15, 0, 16, 2], "texture": "#0"}, + "east": {"uv": [14, 0, 15, 2], "texture": "#0"}, + "south": {"uv": [13, 0, 14, 2], "texture": "#0"}, + "west": {"uv": [12, 0, 13, 2], "texture": "#0"}, + "up": {"uv": [13, 0, 14, 1], "texture": "#0"} + } + }, + { + "from": [7.5, 2.5, 5], + "to": [8.5, 6.5, 6], + "rotation": {"angle": -45, "axis": "x", "origin": [8, 5, 5]}, + "faces": { + "north": {"uv": [14, 1, 15, 5], "texture": "#0"}, + "east": {"uv": [13, 1, 14, 5], "texture": "#0"}, + "south": {"uv": [12, 1, 13, 5], "texture": "#0"}, + "west": {"uv": [15, 1, 16, 5], "texture": "#0"}, + "down": {"uv": [13, 4, 14, 5], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [7.5, 6.06066, 3.93934], + "to": [8.5, 8.06066, 4.93934], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 15.06066, -3.06066]}, + "faces": { + "north": {"uv": [14, 0, 15, 2], "texture": "#0"}, + "east": {"uv": [13, 0, 14, 2], "texture": "#0"}, + "south": {"uv": [12, 0, 13, 2], "texture": "#0"}, + "west": {"uv": [15, 0, 16, 2], "texture": "#0"}, + "up": {"uv": [13, 0, 14, 1], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [5, 2.5, 7.5], + "to": [6, 6.5, 8.5], + "rotation": {"angle": 45, "axis": "z", "origin": [5, 5, 8]}, + "faces": { + "north": {"uv": [13, 1, 14, 5], "texture": "#0"}, + "east": {"uv": [12, 1, 13, 5], "texture": "#0"}, + "south": {"uv": [15, 1, 16, 5], "texture": "#0"}, + "west": {"uv": [14, 1, 15, 5], "texture": "#0"}, + "down": {"uv": [13, 4, 14, 5], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [3.93934, 6.06066, 7.5], + "to": [4.93934, 8.06066, 8.5], + "rotation": {"angle": 0, "axis": "y", "origin": [-3.06066, 15.06066, 0]}, + "faces": { + "north": {"uv": [13, 0, 14, 2], "texture": "#0"}, + "east": {"uv": [12, 0, 13, 2], "texture": "#0"}, + "south": {"uv": [15, 0, 16, 2], "texture": "#0"}, + "west": {"uv": [14, 0, 15, 2], "texture": "#0"}, + "up": {"uv": [13, 0, 14, 1], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [7.5, 2.5, 10], + "to": [8.5, 6.5, 11], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 5, 11]}, + "faces": { + "north": {"uv": [12, 1, 13, 5], "texture": "#0"}, + "east": {"uv": [15, 1, 16, 5], "texture": "#0"}, + "south": {"uv": [14, 1, 15, 5], "texture": "#0"}, + "west": {"uv": [13, 1, 14, 5], "texture": "#0"}, + "down": {"uv": [13, 4, 14, 5], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [7.5, 6.06066, 11.06066], + "to": [8.5, 8.06066, 12.06066], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 15.06066, 19.06066]}, + "faces": { + "north": {"uv": [12, 0, 13, 2], "texture": "#0"}, + "east": {"uv": [15, 0, 16, 2], "texture": "#0"}, + "south": {"uv": [14, 0, 15, 2], "texture": "#0"}, + "west": {"uv": [13, 0, 14, 2], "texture": "#0"}, + "up": {"uv": [13, 0, 14, 1], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "connector", + "from": [6.5, 3, 6.5], + "to": [9.5, 4, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 11, 17]}, + "faces": { + "north": {"uv": [7, 3, 10, 4], "texture": "#0"}, + "east": {"uv": [7, 3, 10, 4], "texture": "#0"}, + "south": {"uv": [7, 3, 10, 4], "texture": "#0"}, + "west": {"uv": [7, 3, 10, 4], "texture": "#0"}, + "up": {"uv": [7, 0, 10, 3], "texture": "#0"}, + "down": {"uv": [7, 0, 10, 3], "texture": "#0"} + } + }, + { + "name": "pillar", + "from": [7, 1, 7], + "to": [9, 3, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 9.5, 15]}, + "faces": { + "north": {"uv": [5, 9, 7, 11], "texture": "#0"}, + "east": {"uv": [5, 9, 7, 11], "texture": "#0"}, + "south": {"uv": [5, 9, 7, 11], "texture": "#0"}, + "west": {"uv": [5, 9, 7, 11], "texture": "#0"} + } + }, + { + "name": "base", + "from": [6, 0, 6], + "to": [10, 1, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 8, 17]}, + "faces": { + "north": {"uv": [4, 11, 8, 12], "texture": "#0"}, + "east": {"uv": [4, 11, 8, 12], "texture": "#0"}, + "south": {"uv": [4, 11, 8, 12], "texture": "#0"}, + "west": {"uv": [4, 11, 8, 12], "texture": "#0"}, + "up": {"uv": [0, 8, 4, 12], "texture": "#0"}, + "down": {"uv": [0, 12, 4, 16], "texture": "#0", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "translation": [0.25, 3.5, 0] + }, + "thirdperson_lefthand": { + "translation": [0.25, 3.5, 0] + }, + "firstperson_righthand": { + "translation": [0.25, 3.5, 0] + }, + "firstperson_lefthand": { + "translation": [0.25, 3.5, 0] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.75, 0.75, 0.75] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [0, 3, 0] + }, + "fixed": { + "translation": [0.25, 3.5, 0] + } + }, + "groups": [ + { + "name": "dish", + "origin": [13, 8, 8], + "children": [0, 1, 2, 3, 4] + }, + { + "name": "arm", + "origin": [19.06066, 16.56066, 16], + "children": [5, 6] + }, + { + "name": "arm", + "origin": [19.06066, 16.56066, 16], + "children": [7, 8] + }, + { + "name": "arm", + "origin": [19.06066, 16.56066, 16], + "children": [9, 10] + }, + { + "name": "arm", + "origin": [19.06066, 16.56066, 16], + "children": [11, 12] + }, 13, 14, 15] +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/models/block/wall_receptacle.json b/src/main/resources/assets/ebwizardry/models/block/wall_receptacle.json new file mode 100644 index 00000000..d378d412 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/wall_receptacle.json @@ -0,0 +1,238 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "particle": "ebwizardry:blocks/wall_receptacle", + "main": "ebwizardry:blocks/wall_receptacle" + }, + "elements": [ + { + "from": [6, 8.5, 7], + "to": [10, 9.5, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 8.5, 9]}, + "faces": { + "north": {"uv": [1, 5, 5, 6], "texture": "#main"}, + "east": {"uv": [4, 5, 5, 6], "texture": "#main"}, + "south": {"uv": [1, 5, 5, 6], "texture": "#main"}, + "west": {"uv": [1, 5, 2, 6], "texture": "#main"}, + "up": {"uv": [1, 5, 5, 6], "texture": "#main"}, + "down": {"uv": [1, 5, 5, 6], "texture": "#main"} + } + }, + { + "from": [6, 7.5, 3], + "to": [10, 8.5, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8.5, 5]}, + "faces": { + "north": {"uv": [1, 7, 5, 8], "texture": "#main"}, + "east": {"uv": [1, 7, 5, 8], "texture": "#main"}, + "south": {"uv": [1, 7, 5, 8], "texture": "#main"}, + "west": {"uv": [1, 7, 5, 8], "texture": "#main"}, + "up": {"uv": [1, 1, 5, 5], "texture": "#main"}, + "down": {"uv": [1, 1, 5, 5], "texture": "#main"} + } + }, + { + "from": [5, 8.5, 3], + "to": [6, 9.5, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8.5, 5]}, + "faces": { + "north": {"uv": [0, 1, 1, 2], "texture": "#main"}, + "east": {"uv": [0, 1, 1, 5], "rotation": 90, "texture": "#main"}, + "south": {"uv": [0, 4, 1, 5], "texture": "#main"}, + "west": {"uv": [0, 1, 1, 5], "rotation": 90, "texture": "#main"}, + "up": {"uv": [0, 1, 1, 5], "texture": "#main"}, + "down": {"uv": [0, 1, 1, 5], "texture": "#main"} + } + }, + { + "from": [6, 8.5, 2], + "to": [10, 9.5, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 8.5, 4]}, + "faces": { + "north": {"uv": [1, 0, 5, 1], "texture": "#main"}, + "east": {"uv": [4, 0, 5, 1], "texture": "#main"}, + "south": {"uv": [1, 0, 5, 1], "texture": "#main"}, + "west": {"uv": [1, 0, 2, 1], "texture": "#main"}, + "up": {"uv": [1, 0, 5, 1], "texture": "#main"}, + "down": {"uv": [1, 0, 5, 1], "texture": "#main"} + } + }, + { + "from": [10, 8.5, 3], + "to": [11, 9.5, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 8.5, 5]}, + "faces": { + "north": {"uv": [5, 1, 6, 2], "texture": "#main"}, + "east": {"uv": [5, 1, 6, 5], "rotation": 90, "texture": "#main"}, + "south": {"uv": [5, 4, 6, 5], "texture": "#main"}, + "west": {"uv": [5, 1, 6, 5], "rotation": 90, "texture": "#main"}, + "up": {"uv": [5, 1, 6, 5], "texture": "#main"}, + "down": {"uv": [5, 1, 6, 5], "texture": "#main"} + } + }, + { + "from": [10, 4.5, 4.5], + "to": [11, 8.5, 5.5], + "rotation": {"angle": -45, "axis": "z", "origin": [11, 7, 5]}, + "faces": { + "north": {"uv": [15, 1, 16, 5], "texture": "#main"}, + "east": {"uv": [14, 1, 15, 5], "texture": "#main"}, + "south": {"uv": [13, 1, 14, 5], "texture": "#main"}, + "west": {"uv": [12, 1, 13, 5], "texture": "#main"}, + "down": {"uv": [13, 4, 14, 5], "texture": "#main"} + } + }, + { + "from": [11.06066, 8.06066, 4.5], + "to": [12.06066, 10.06066, 5.5], + "rotation": {"angle": 0, "axis": "y", "origin": [19.06066, 17.06066, 13]}, + "faces": { + "north": {"uv": [15, 0, 16, 2], "texture": "#main"}, + "east": {"uv": [14, 0, 15, 2], "texture": "#main"}, + "south": {"uv": [13, 0, 14, 2], "texture": "#main"}, + "west": {"uv": [12, 0, 13, 2], "texture": "#main"}, + "up": {"uv": [13, 0, 14, 1], "texture": "#main"} + } + }, + { + "from": [7.5, 4.5, 2], + "to": [8.5, 8.5, 3], + "rotation": {"angle": -45, "axis": "x", "origin": [8, 7, 2]}, + "faces": { + "north": {"uv": [14, 1, 15, 5], "texture": "#main"}, + "east": {"uv": [13, 1, 14, 5], "texture": "#main"}, + "south": {"uv": [12, 1, 13, 5], "texture": "#main"}, + "west": {"uv": [15, 1, 16, 5], "texture": "#main"}, + "down": {"uv": [13, 4, 14, 5], "rotation": 90, "texture": "#main"} + } + }, + { + "from": [7.5, 8.06066, 0.93934], + "to": [8.5, 10.06066, 1.93934], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 17.06066, -6.06066]}, + "faces": { + "north": {"uv": [14, 0, 15, 2], "texture": "#main"}, + "east": {"uv": [13, 0, 14, 2], "texture": "#main"}, + "south": {"uv": [12, 0, 13, 2], "texture": "#main"}, + "west": {"uv": [15, 0, 16, 2], "texture": "#main"}, + "up": {"uv": [13, 0, 14, 1], "rotation": 270, "texture": "#main"} + } + }, + { + "from": [5, 4.5, 4.5], + "to": [6, 8.5, 5.5], + "rotation": {"angle": 45, "axis": "z", "origin": [5, 7, 5]}, + "faces": { + "north": {"uv": [13, 1, 14, 5], "texture": "#main"}, + "east": {"uv": [12, 1, 13, 5], "texture": "#main"}, + "south": {"uv": [15, 1, 16, 5], "texture": "#main"}, + "west": {"uv": [14, 1, 15, 5], "texture": "#main"}, + "down": {"uv": [13, 4, 14, 5], "rotation": 180, "texture": "#main"} + } + }, + { + "from": [3.93934, 8.06066, 4.5], + "to": [4.93934, 10.06066, 5.5], + "rotation": {"angle": 0, "axis": "y", "origin": [-3.06066, 17.06066, -3]}, + "faces": { + "north": {"uv": [13, 0, 14, 2], "texture": "#main"}, + "east": {"uv": [12, 0, 13, 2], "texture": "#main"}, + "south": {"uv": [15, 0, 16, 2], "texture": "#main"}, + "west": {"uv": [14, 0, 15, 2], "texture": "#main"}, + "up": {"uv": [13, 0, 14, 1], "rotation": 180, "texture": "#main"} + } + }, + { + "from": [7.5, 4.5, 7], + "to": [8.5, 8.5, 8], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [12, 1, 13, 5], "texture": "#main"}, + "east": {"uv": [15, 1, 16, 5], "texture": "#main"}, + "south": {"uv": [14, 1, 15, 5], "texture": "#main"}, + "west": {"uv": [13, 1, 14, 5], "texture": "#main"}, + "down": {"uv": [13, 4, 14, 5], "rotation": 270, "texture": "#main"} + } + }, + { + "from": [7.5, 8.06066, 8.06066], + "to": [8.5, 10.06066, 9.06066], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 17.06066, 16.06066]}, + "faces": { + "north": {"uv": [12, 0, 13, 2], "texture": "#main"}, + "east": {"uv": [15, 0, 16, 2], "texture": "#main"}, + "south": {"uv": [14, 0, 15, 2], "texture": "#main"}, + "west": {"uv": [13, 0, 14, 2], "texture": "#main"}, + "up": {"uv": [13, 0, 14, 1], "rotation": 90, "texture": "#main"} + } + }, + { + "name": "connector", + "from": [6.5, 5, 3.5], + "to": [9.5, 6, 6.5], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 13, 14]}, + "faces": { + "north": {"uv": [7, 3, 10, 4], "texture": "#main"}, + "east": {"uv": [7, 3, 10, 4], "texture": "#main"}, + "south": {"uv": [7, 3, 10, 4], "texture": "#main"}, + "west": {"uv": [7, 3, 10, 4], "texture": "#main"}, + "up": {"uv": [7, 0, 10, 3], "texture": "#main"}, + "down": {"uv": [7, 0, 10, 3], "texture": "#main"} + } + }, + { + "name": "pillar", + "from": [7, 3, 1], + "to": [9, 5, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 11.5, 15]}, + "faces": { + "east": {"uv": [10, 10, 5, 12], "texture": "#main"}, + "south": {"uv": [10, 10, 12, 12], "texture": "#main"}, + "west": {"uv": [5, 10, 10, 12], "texture": "#main"}, + "up": {"uv": [10, 10, 5, 12], "rotation": 270, "texture": "#main"}, + "down": {"uv": [5, 10, 10, 12], "rotation": 270, "texture": "#main"} + } + }, + { + "name": "base", + "from": [6, 2, 0], + "to": [10, 6, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4.5, 1]}, + "faces": { + "north": {"uv": [0, 9, 4, 13], "texture": "#main", "cullface": "north"}, + "east": {"uv": [4, 9, 5, 13], "texture": "#main"}, + "south": {"uv": [0, 9, 4, 13], "texture": "#main"}, + "west": {"uv": [4, 9, 5, 13], "texture": "#main"}, + "up": {"uv": [0, 8, 4, 9], "texture": "#main"}, + "down": {"uv": [0, 13, 4, 14], "texture": "#main"} + } + } + ], + "groups": [ + { + "name": "dish", + "origin": [13, 8, 8], + "children": [0, 1, 2, 3, 4] + }, + { + "name": "arm", + "origin": [19.06066, 16.56066, 16], + "children": [5, 6] + }, + { + "name": "arm", + "origin": [19.06066, 16.56066, 16], + "children": [7, 8] + }, + { + "name": "arm", + "origin": [19.06066, 16.56066, 16], + "children": [9, 10] + }, + { + "name": "arm", + "origin": [19.06066, 16.56066, 16], + "children": [11, 12] + }, 13, 14, 15] +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/models/item/receptacle.json b/src/main/resources/assets/ebwizardry/models/item/receptacle.json new file mode 100644 index 00000000..6d9b51f0 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/receptacle.json @@ -0,0 +1,3 @@ +{ + "parent": "ebwizardry:block/receptacle" +} diff --git a/src/main/resources/assets/ebwizardry/sounds.json b/src/main/resources/assets/ebwizardry/sounds.json index 975ef6c1..4ff79637 100644 --- a/src/main/resources/assets/ebwizardry/sounds.json +++ b/src/main/resources/assets/ebwizardry/sounds.json @@ -3,6 +3,7 @@ "block.pedestal.activate": {"category": "blocks", "sounds": ["mob/evocation_illager/prepare_summon"]}, "block.pedestal.conquer": {"category": "blocks", "sounds": ["ui/toast/challenge_complete"]}, "block.lectern.locate_spell": {"category": "blocks", "sounds": ["ebwizardry:conjure"]}, + "block.receptacle.ignite": {"category": "blocks", "sounds": ["mob/evocation_illager/cast1", "mob/evocation_illager/cast2"]}, "item.wand.switch_spell": {"category": "player", "sounds": ["ebwizardry:select"]}, "item.wand.levelup": {"category": "player", "sounds": ["random/levelup"]}, diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/receptacle.png b/src/main/resources/assets/ebwizardry/textures/blocks/receptacle.png new file mode 100644 index 0000000000000000000000000000000000000000..300eadb5108039a4daf9818494393ec5cc928a34 GIT binary patch literal 6729 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 a^$ef&Sv!=q1NMSO);wMPT-G@yGywpc?D^dQ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/wall_receptacle.png b/src/main/resources/assets/ebwizardry/textures/blocks/wall_receptacle.png new file mode 100644 index 0000000000000000000000000000000000000000..bbae2f2d9a9947bf09550612a7e20e8d50eeb8bf GIT binary patch literal 6387 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�ZlE!HA3|+ zeW`Dwe-=H`NH8x?ubg#P@@&oLvo*>Le*OHbQ|;Ilddw?7{8(D?_l=zWrA@y~cQ3G) z5{ijpTu?T-YgXsw$A_~%JrrIg&bUB)+TXpgW#8<&`}6mQOB*dRn6^QO#ld9XMTQqT zpDkC38%{7}mRwvV*ymesvczE8zl;~$MY+=X2c%9fW7{PtZIpF{J6Sqk;MnXJN5khY z5T9n?XRy*ujbmbF&a#P}ObI{FnmHWVrOISeX%Ut9tl^(&K*_7445w?(oxJF{HP2*n zmd~oc@eFfhWJ6}2{LA5ge~&Q3dHK5^Pp&JL^-$yb`0D82SI=*ntC=YS z&#_Ng3;+N9e3ECT2LFadhvp}&W>S9Dy3S&@RLUZWo~7TJugf0zzdP{iwOH2ZDR(D5 zxYU)CbD?aN#D?dsLi{X6Zmj{IlRxbSO|&1JETpwT2x LS3j3^P6