diff --git a/src/main/java/com/teamwizardry/wizardry/Wizardry.java b/src/main/java/com/teamwizardry/wizardry/Wizardry.java
index 581875ea1..d4e24f333 100644
--- a/src/main/java/com/teamwizardry/wizardry/Wizardry.java
+++ b/src/main/java/com/teamwizardry/wizardry/Wizardry.java
@@ -1,6 +1,5 @@
package com.teamwizardry.wizardry;
-import com.teamwizardry.librarianlib.features.utilities.UnsafeKt;
import com.teamwizardry.wizardry.common.command.CommandWizardry;
import com.teamwizardry.wizardry.proxy.CommonProxy;
import net.minecraft.world.DimensionType;
diff --git a/src/main/java/com/teamwizardry/wizardry/api/ConfigValues.java b/src/main/java/com/teamwizardry/wizardry/api/ConfigValues.java
index 981739f5d..c6660df10 100644
--- a/src/main/java/com/teamwizardry/wizardry/api/ConfigValues.java
+++ b/src/main/java/com/teamwizardry/wizardry/api/ConfigValues.java
@@ -31,6 +31,9 @@ public class ConfigValues {
@ConfigProperty(category = "world", comment = "If you have a dimension ID conflict with this mod and something else, change this number")
public static int underworldID = 33;
+ @ConfigProperty(category = "world", comment = "Chance of an underworld boat being generated in a chunk (1 in X)")
+ public static int underworldBoatChance = 1000;
+
@ConfigProperty(category = "world", comment = "If you have a dimension ID conflict with this mod and something else, change this number")
public static int torikkiID = 34;
diff --git a/src/main/java/com/teamwizardry/wizardry/api/capability/player/miscdata/MiscCapabilityStorage.java b/src/main/java/com/teamwizardry/wizardry/api/capability/player/miscdata/MiscCapabilityStorage.java
index c385dd0ff..48da1f53a 100644
--- a/src/main/java/com/teamwizardry/wizardry/api/capability/player/miscdata/MiscCapabilityStorage.java
+++ b/src/main/java/com/teamwizardry/wizardry/api/capability/player/miscdata/MiscCapabilityStorage.java
@@ -1,7 +1,6 @@
package com.teamwizardry.wizardry.api.capability.player.miscdata;
import com.teamwizardry.librarianlib.features.helpers.NBTHelper;
-import com.teamwizardry.wizardry.common.module.effects.ModuleEffectBackup;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
diff --git a/src/main/java/com/teamwizardry/wizardry/api/spell/module/IModuleEvent.java b/src/main/java/com/teamwizardry/wizardry/api/spell/module/IModuleEvent.java
index 3a7e2d5b5..6108595f6 100644
--- a/src/main/java/com/teamwizardry/wizardry/api/spell/module/IModuleEvent.java
+++ b/src/main/java/com/teamwizardry/wizardry/api/spell/module/IModuleEvent.java
@@ -1,9 +1,13 @@
package com.teamwizardry.wizardry.api.spell.module;
+import com.teamwizardry.wizardry.api.spell.SpellData;
+import com.teamwizardry.wizardry.api.spell.SpellRing;
+import net.minecraft.world.World;
+
/**
* Interface for event modules.
*
- * Usage: Override {@link IRunnableModule#run()} and return true
iff following elements from a spell chain must be executed.
+ * Usage: Override {@link IRunnableModule#run(World, ModuleInstance, SpellData, SpellRing)} and return true
iff following elements from a spell chain must be executed.
*
* @author Avatair
*/
diff --git a/src/main/java/com/teamwizardry/wizardry/client/core/renderer/HudRenderer.java b/src/main/java/com/teamwizardry/wizardry/client/core/renderer/HudRenderer.java
index acf513545..675c32b9b 100644
--- a/src/main/java/com/teamwizardry/wizardry/client/core/renderer/HudRenderer.java
+++ b/src/main/java/com/teamwizardry/wizardry/client/core/renderer/HudRenderer.java
@@ -1,7 +1,6 @@
package com.teamwizardry.wizardry.client.core.renderer;
import com.teamwizardry.librarianlib.core.client.ClientTickHandler;
-import com.teamwizardry.librarianlib.features.sprite.ISprite;
import com.teamwizardry.librarianlib.features.sprite.Sprite;
import com.teamwizardry.librarianlib.features.sprite.Texture;
import com.teamwizardry.wizardry.Wizardry;
diff --git a/src/main/java/com/teamwizardry/wizardry/client/gui/worktable/ComponentModifiers.java b/src/main/java/com/teamwizardry/wizardry/client/gui/worktable/ComponentModifiers.java
index aec29d42f..60bd69882 100644
--- a/src/main/java/com/teamwizardry/wizardry/client/gui/worktable/ComponentModifiers.java
+++ b/src/main/java/com/teamwizardry/wizardry/client/gui/worktable/ComponentModifiers.java
@@ -17,7 +17,6 @@
import com.teamwizardry.wizardry.api.spell.attribute.AttributeRegistry;
import com.teamwizardry.wizardry.api.spell.module.ModuleInstance;
import com.teamwizardry.wizardry.api.spell.module.ModuleInstanceModifier;
-import com.teamwizardry.wizardry.api.spell.module.ModuleInstanceShape;
import com.teamwizardry.wizardry.api.util.RandUtil;
import com.teamwizardry.wizardry.init.ModSounds;
import net.minecraft.client.Minecraft;
diff --git a/src/main/java/com/teamwizardry/wizardry/common/block/BlockUnderworldTeleporter.java b/src/main/java/com/teamwizardry/wizardry/common/block/BlockUnderworldTeleporter.java
index e60e09862..71f1a67b6 100644
--- a/src/main/java/com/teamwizardry/wizardry/common/block/BlockUnderworldTeleporter.java
+++ b/src/main/java/com/teamwizardry/wizardry/common/block/BlockUnderworldTeleporter.java
@@ -1,25 +1,13 @@
package com.teamwizardry.wizardry.common.block;
-import com.teamwizardry.librarianlib.features.base.block.BlockMod;
import com.teamwizardry.librarianlib.features.base.block.tile.BlockModContainer;
-import com.teamwizardry.wizardry.Wizardry;
import com.teamwizardry.wizardry.api.ConfigValues;
import com.teamwizardry.wizardry.common.tile.TileUnderworldPortal;
-import net.minecraft.block.BlockEndPortal;
-import net.minecraft.block.BlockLadder;
-import net.minecraft.block.ITileEntityProvider;
-import net.minecraft.block.material.MapColor;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.Entity;
-import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
-import net.minecraft.tileentity.TileEntityEndPortal;
-import net.minecraft.util.EnumFacing;
-import net.minecraft.util.EnumHand;
-import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
-import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/com/teamwizardry/wizardry/common/block/wisdomwood/BlockWisdomSapling.java b/src/main/java/com/teamwizardry/wizardry/common/block/wisdomwood/BlockWisdomSapling.java
index 55c52e86f..3b81a56ab 100644
--- a/src/main/java/com/teamwizardry/wizardry/common/block/wisdomwood/BlockWisdomSapling.java
+++ b/src/main/java/com/teamwizardry/wizardry/common/block/wisdomwood/BlockWisdomSapling.java
@@ -1,7 +1,6 @@
package com.teamwizardry.wizardry.common.block.wisdomwood;
import com.teamwizardry.librarianlib.features.base.block.BlockModSapling;
-import com.teamwizardry.wizardry.common.world.WorldGeneratorWisdomTree;
import com.teamwizardry.wizardry.init.ModBlocks;
import net.minecraft.block.state.IBlockState;
diff --git a/src/main/java/com/teamwizardry/wizardry/common/command/CommandTeleportTorikki.java b/src/main/java/com/teamwizardry/wizardry/common/command/CommandTeleportTorikki.java
index 57ad3cad7..6305b32e1 100644
--- a/src/main/java/com/teamwizardry/wizardry/common/command/CommandTeleportTorikki.java
+++ b/src/main/java/com/teamwizardry/wizardry/common/command/CommandTeleportTorikki.java
@@ -1,7 +1,5 @@
package com.teamwizardry.wizardry.common.command;
-import com.teamwizardry.wizardry.Wizardry;
-import com.teamwizardry.wizardry.api.util.TeleportUtil;
import net.minecraft.command.CommandBase;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.Entity;
diff --git a/src/main/java/com/teamwizardry/wizardry/common/entity/EntityFairy.java b/src/main/java/com/teamwizardry/wizardry/common/entity/EntityFairy.java
index 8f16282c5..42fe8f088 100644
--- a/src/main/java/com/teamwizardry/wizardry/common/entity/EntityFairy.java
+++ b/src/main/java/com/teamwizardry/wizardry/common/entity/EntityFairy.java
@@ -4,7 +4,6 @@
import com.google.common.collect.Lists;
import com.teamwizardry.librarianlib.features.helpers.NBTHelper;
import com.teamwizardry.librarianlib.features.network.PacketHandler;
-import com.teamwizardry.wizardry.api.NBTConstants.NBT;
import com.teamwizardry.wizardry.api.entity.fairy.FairyData;
import com.teamwizardry.wizardry.api.entity.fairy.fairytasks.FairyTaskController;
import com.teamwizardry.wizardry.api.entity.fairy.fairytasks.FairyTaskRegistry;
diff --git a/src/main/java/com/teamwizardry/wizardry/common/item/ItemFairyImbuedApple.java b/src/main/java/com/teamwizardry/wizardry/common/item/ItemFairyImbuedApple.java
index 0308fe8c6..75ff68d70 100644
--- a/src/main/java/com/teamwizardry/wizardry/common/item/ItemFairyImbuedApple.java
+++ b/src/main/java/com/teamwizardry/wizardry/common/item/ItemFairyImbuedApple.java
@@ -8,7 +8,6 @@
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.MobEffects;
import net.minecraft.item.EnumRarity;
-import net.minecraft.item.ItemAppleGold;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.PotionEffect;
import net.minecraft.world.World;
diff --git a/src/main/java/com/teamwizardry/wizardry/common/item/ItemMagicWand.java b/src/main/java/com/teamwizardry/wizardry/common/item/ItemMagicWand.java
index f682a37c6..0fd8acf2f 100644
--- a/src/main/java/com/teamwizardry/wizardry/common/item/ItemMagicWand.java
+++ b/src/main/java/com/teamwizardry/wizardry/common/item/ItemMagicWand.java
@@ -3,10 +3,8 @@
import com.teamwizardry.librarianlib.features.base.item.IGlowingItem;
import com.teamwizardry.librarianlib.features.base.item.ItemMod;
import com.teamwizardry.librarianlib.features.helpers.NBTHelper;
-import com.teamwizardry.wizardry.common.entity.EntityFairy;
import com.teamwizardry.wizardry.init.ModItems;
import net.minecraft.client.renderer.block.model.IBakedModel;
-import net.minecraft.enchantment.Enchantment;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.ItemStack;
diff --git a/src/main/java/com/teamwizardry/wizardry/common/item/ItemStaff.java b/src/main/java/com/teamwizardry/wizardry/common/item/ItemStaff.java
index 8a8c878e5..2990d2189 100644
--- a/src/main/java/com/teamwizardry/wizardry/common/item/ItemStaff.java
+++ b/src/main/java/com/teamwizardry/wizardry/common/item/ItemStaff.java
@@ -18,7 +18,6 @@
import com.teamwizardry.wizardry.common.module.defaults.IModuleOverrides;
import com.teamwizardry.wizardry.common.potion.PotionTimeSlow;
import com.teamwizardry.wizardry.init.ModItems;
-import com.teamwizardry.wizardry.init.ModPotions;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.creativetab.CreativeTabs;
@@ -31,7 +30,6 @@
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTUtil;
-import net.minecraft.potion.PotionEffect;
import net.minecraft.util.*;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
diff --git a/src/main/java/com/teamwizardry/wizardry/common/item/halos/ItemFakeHaloBauble.java b/src/main/java/com/teamwizardry/wizardry/common/item/halos/ItemFakeHaloBauble.java
index 6c0df423e..c06249687 100644
--- a/src/main/java/com/teamwizardry/wizardry/common/item/halos/ItemFakeHaloBauble.java
+++ b/src/main/java/com/teamwizardry/wizardry/common/item/halos/ItemFakeHaloBauble.java
@@ -21,7 +21,6 @@
import org.jetbrains.annotations.Nullable;
import javax.annotation.Nonnull;
-import java.util.ArrayList;
import java.util.List;
/**
diff --git a/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectBackup.java b/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectBackup.java
index 0c8f3c373..a2fd19c5a 100644
--- a/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectBackup.java
+++ b/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectBackup.java
@@ -1,6 +1,5 @@
package com.teamwizardry.wizardry.common.module.effects;
-import com.teamwizardry.librarianlib.features.helpers.NBTHelper;
import com.teamwizardry.librarianlib.features.math.interpolate.StaticInterp;
import com.teamwizardry.librarianlib.features.math.interpolate.numeric.InterpFloatInOut;
import com.teamwizardry.librarianlib.features.particle.ParticleBuilder;
@@ -9,9 +8,6 @@
import com.teamwizardry.wizardry.Wizardry;
import com.teamwizardry.wizardry.api.ConfigValues;
import com.teamwizardry.wizardry.api.NBTConstants;
-import com.teamwizardry.wizardry.api.capability.player.mana.ManaManager;
-import com.teamwizardry.wizardry.api.capability.player.miscdata.IMiscCapability;
-import com.teamwizardry.wizardry.api.capability.player.miscdata.MiscCapabilityProvider;
import com.teamwizardry.wizardry.api.capability.world.WizardryWorld;
import com.teamwizardry.wizardry.api.capability.world.WizardryWorldCapability;
import com.teamwizardry.wizardry.api.spell.SpellData;
@@ -25,13 +21,8 @@
import com.teamwizardry.wizardry.common.entity.EntityBackupZombie;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.EntityPlayerMP;
-import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ResourceLocation;
-import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;
@@ -44,8 +35,6 @@
import javax.annotation.Nonnull;
-import java.util.HashMap;
-import java.util.Queue;
import java.util.UUID;
import static com.teamwizardry.wizardry.api.spell.SpellData.DefaultKeys.FACE_HIT;
diff --git a/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectFrost.java b/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectFrost.java
index 9b3ea2163..21d0ed9ff 100644
--- a/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectFrost.java
+++ b/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectFrost.java
@@ -62,8 +62,8 @@ public boolean onRunZone(World world, SpellData data, SpellRing ring, @ContextRi
if (targetPos == null) return false;
- Vec3d min = targetPos.subtract(aoe, range, aoe);
- Vec3d max = targetPos.add(aoe, range, aoe);
+ BlockPos min = new BlockPos(targetPos.subtract(aoe, range, aoe));
+ BlockPos max = new BlockPos(targetPos.add(aoe, range, aoe));
List entities = world.getEntitiesWithinAABBExcludingEntity(null, new AxisAlignedBB(min, max));
for (Entity entity : entities) {
diff --git a/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectLowGravity.java b/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectLowGravity.java
index 8365071bf..1d6a93136 100644
--- a/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectLowGravity.java
+++ b/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectLowGravity.java
@@ -55,8 +55,8 @@ public boolean onRunZone(World world, SpellData data, SpellRing ring, @ContextRi
if (targetPos == null) return false;
- Vec3d min = targetPos.subtract(aoe, range, aoe);
- Vec3d max = targetPos.add(aoe, range, aoe);
+ BlockPos min = new BlockPos(targetPos.subtract(aoe, range, aoe));
+ BlockPos max = new BlockPos(targetPos.add(aoe, range, aoe));
List entities = world.getEntitiesWithinAABBExcludingEntity(null, new AxisAlignedBB(min, max));
for (Entity entity : entities) {
diff --git a/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectThrive.java b/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectThrive.java
index 873d7ee59..c44029217 100644
--- a/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectThrive.java
+++ b/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectThrive.java
@@ -1,11 +1,6 @@
package com.teamwizardry.wizardry.common.module.effects;
-import com.teamwizardry.librarianlib.core.LibrarianLib;
import com.teamwizardry.librarianlib.features.network.PacketHandler;
-import com.teamwizardry.librarianlib.features.particle.ParticleBuilder;
-import com.teamwizardry.librarianlib.features.particle.ParticleSpawner;
-import com.teamwizardry.wizardry.Wizardry;
-import com.teamwizardry.wizardry.api.ConfigValues;
import com.teamwizardry.wizardry.api.spell.SpellData;
import com.teamwizardry.wizardry.api.spell.SpellRing;
import com.teamwizardry.wizardry.api.spell.annotation.RegisterModule;
@@ -14,16 +9,12 @@
import com.teamwizardry.wizardry.api.spell.module.ModuleInstanceEffect;
import com.teamwizardry.wizardry.api.util.BlockUtils;
import com.teamwizardry.wizardry.api.util.RandUtil;
-import com.teamwizardry.wizardry.client.core.renderer.StructureErrorRenderer;
import com.teamwizardry.wizardry.client.fx.LibParticles;
-import com.teamwizardry.wizardry.common.block.BlockCraftingPlate;
import com.teamwizardry.wizardry.common.network.PacketThriveBlock;
import com.teamwizardry.wizardry.init.ModSounds;
import net.minecraft.block.Block;
-import net.minecraft.block.BlockFarmland;
import net.minecraft.block.IGrowable;
import net.minecraft.block.state.IBlockState;
-import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
@@ -31,7 +22,6 @@
import net.minecraft.init.Items;
import net.minecraft.item.ItemDye;
import net.minecraft.item.ItemStack;
-import net.minecraft.util.EnumParticleTypes;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
diff --git a/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectTimeLock.java b/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectTimeLock.java
index 3400b71f3..b0c0fbca6 100644
--- a/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectTimeLock.java
+++ b/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectTimeLock.java
@@ -1,35 +1,5 @@
package com.teamwizardry.wizardry.common.module.effects;
-import com.google.common.collect.HashMultimap;
-import com.teamwizardry.wizardry.api.spell.IDelayedModule;
-import com.teamwizardry.wizardry.api.spell.SpellData;
-import com.teamwizardry.wizardry.api.spell.SpellRing;
-import com.teamwizardry.wizardry.api.spell.annotation.RegisterModule;
-import com.teamwizardry.wizardry.api.spell.attribute.AttributeRegistry;
-import com.teamwizardry.wizardry.api.spell.module.IModuleEffect;
-import com.teamwizardry.wizardry.api.spell.module.ModuleInstanceEffect;
-import com.teamwizardry.wizardry.api.util.RandUtil;
-import com.teamwizardry.wizardry.client.fx.LibParticles;
-import com.teamwizardry.wizardry.common.core.WizardryNemezManager;
-import com.teamwizardry.wizardry.common.core.nemez.NemezEventHandler;
-import com.teamwizardry.wizardry.common.core.nemez.NemezTracker;
-import com.teamwizardry.wizardry.init.ModPotions;
-import com.teamwizardry.wizardry.init.ModSounds;
-import net.minecraft.entity.Entity;
-import net.minecraft.entity.EntityLivingBase;
-import net.minecraft.potion.PotionEffect;
-import net.minecraft.util.SoundCategory;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Vec3d;
-import net.minecraft.world.World;
-import net.minecraftforge.fml.relauncher.Side;
-import net.minecraftforge.fml.relauncher.SideOnly;
-import org.jetbrains.annotations.NotNull;
-
-import javax.annotation.Nonnull;
-import java.awt.*;
-import java.util.UUID;
-
/**
* Created by Demoniaque.
*/
diff --git a/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectTimeSlow.java b/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectTimeSlow.java
index b913edb08..e8ddb0a4a 100644
--- a/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectTimeSlow.java
+++ b/src/main/java/com/teamwizardry/wizardry/common/module/effects/ModuleEffectTimeSlow.java
@@ -83,8 +83,8 @@ public boolean onRunZone(World world, SpellData data, SpellRing ring, @ContextRi
if (targetPos == null) return false;
- Vec3d min = targetPos.subtract(aoe, range, aoe);
- Vec3d max = targetPos.add(aoe, range, aoe);
+ BlockPos min = new BlockPos(targetPos.subtract(aoe, range, aoe));
+ BlockPos max = new BlockPos(targetPos.add(aoe, range, aoe));
List entities = world.getEntitiesWithinAABBExcludingEntity(null, new AxisAlignedBB(min, max));
for (Entity entity : entities) {
diff --git a/src/main/java/com/teamwizardry/wizardry/common/module/effects/vanish/ModuleEffectVanish.java b/src/main/java/com/teamwizardry/wizardry/common/module/effects/vanish/ModuleEffectVanish.java
index d2966e192..e1f3b9642 100644
--- a/src/main/java/com/teamwizardry/wizardry/common/module/effects/vanish/ModuleEffectVanish.java
+++ b/src/main/java/com/teamwizardry/wizardry/common/module/effects/vanish/ModuleEffectVanish.java
@@ -18,6 +18,7 @@
import net.minecraft.potion.PotionEffect;
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.World;
import net.minecraftforge.fml.relauncher.Side;
@@ -47,8 +48,8 @@ public boolean onRunZone(World world, SpellData data, SpellRing ring, @ContextRi
if (targetPos == null) return false;
- Vec3d min = targetPos.subtract(aoe, range, aoe);
- Vec3d max = targetPos.add(aoe, range, aoe);
+ BlockPos min = new BlockPos(targetPos.subtract(aoe, range, aoe));
+ BlockPos max = new BlockPos(targetPos.add(aoe, range, aoe));
List entities = world.getEntitiesWithinAABBExcludingEntity(null, new AxisAlignedBB(min, max));
for (Entity entity : entities) {
diff --git a/src/main/java/com/teamwizardry/wizardry/common/network/PacketClearCraftingPlate.java b/src/main/java/com/teamwizardry/wizardry/common/network/PacketClearCraftingPlate.java
index d7aa2c3c7..be6d18735 100644
--- a/src/main/java/com/teamwizardry/wizardry/common/network/PacketClearCraftingPlate.java
+++ b/src/main/java/com/teamwizardry/wizardry/common/network/PacketClearCraftingPlate.java
@@ -4,7 +4,6 @@
import com.teamwizardry.librarianlib.features.autoregister.PacketRegister;
import com.teamwizardry.librarianlib.features.network.PacketBase;
import com.teamwizardry.librarianlib.features.saving.Save;
-import com.teamwizardry.wizardry.Wizardry;
import com.teamwizardry.wizardry.client.render.block.TileCraftingPlateRenderer;
import com.teamwizardry.wizardry.common.tile.TileCraftingPlate;
import net.minecraft.item.ItemStack;
diff --git a/src/main/java/com/teamwizardry/wizardry/common/potion/PotionTimeLock.java b/src/main/java/com/teamwizardry/wizardry/common/potion/PotionTimeLock.java
index 784aabb7f..adaeadee2 100644
--- a/src/main/java/com/teamwizardry/wizardry/common/potion/PotionTimeLock.java
+++ b/src/main/java/com/teamwizardry/wizardry/common/potion/PotionTimeLock.java
@@ -1,21 +1,7 @@
package com.teamwizardry.wizardry.common.potion;
-import com.teamwizardry.wizardry.common.core.WizardryNemezManager;
-import com.teamwizardry.wizardry.common.core.nemez.NemezTracker;
// import com.teamwizardry.wizardry.common.module.effects.ModuleEffectTimeLock;
-import com.teamwizardry.wizardry.init.ModPotions;
-import net.minecraft.entity.EntityLivingBase;
-import net.minecraft.entity.ai.attributes.AbstractAttributeMap;
-import net.minecraftforge.event.entity.item.ItemTossEvent;
-import net.minecraftforge.fml.common.Mod;
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
-import net.minecraftforge.fml.common.gameevent.PlayerEvent;
-import net.minecraftforge.fml.common.gameevent.TickEvent;
-import net.minecraftforge.fml.relauncher.Side;
-import javax.annotation.Nonnull;
-import java.util.List;
-import java.util.UUID;
/**
* Created by Demoniaque.
diff --git a/src/main/java/com/teamwizardry/wizardry/common/potion/PotionTimeSlow.java b/src/main/java/com/teamwizardry/wizardry/common/potion/PotionTimeSlow.java
index 685110d20..2c35cf041 100644
--- a/src/main/java/com/teamwizardry/wizardry/common/potion/PotionTimeSlow.java
+++ b/src/main/java/com/teamwizardry/wizardry/common/potion/PotionTimeSlow.java
@@ -16,11 +16,8 @@
import net.minecraft.entity.boss.dragon.phase.IPhase;
import net.minecraft.entity.boss.dragon.phase.PhaseList;
import net.minecraft.entity.monster.EntityCreeper;
-import net.minecraft.item.ItemEnderEye;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.SoundCategory;
-import net.minecraft.world.World;
-import net.minecraftforge.client.event.MouseEvent;
import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent;
import net.minecraftforge.event.entity.living.LivingEvent;
import net.minecraftforge.event.entity.living.LivingFallEvent;
@@ -32,7 +29,6 @@
import net.minecraftforge.fml.common.gameevent.PlayerEvent;
import javax.annotation.Nonnull;
-import java.util.logging.Logger;
/**
* Created by Demoniaque.
diff --git a/src/main/java/com/teamwizardry/wizardry/common/tile/TileUnderworldPortal.java b/src/main/java/com/teamwizardry/wizardry/common/tile/TileUnderworldPortal.java
index 15da7accd..7f45e10de 100644
--- a/src/main/java/com/teamwizardry/wizardry/common/tile/TileUnderworldPortal.java
+++ b/src/main/java/com/teamwizardry/wizardry/common/tile/TileUnderworldPortal.java
@@ -1,7 +1,6 @@
package com.teamwizardry.wizardry.common.tile;
import net.minecraft.tileentity.TileEntity;
-import net.minecraft.tileentity.TileEntityEndPortal;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
diff --git a/src/main/java/com/teamwizardry/wizardry/common/world/biome/BiomeUnderWorld.java b/src/main/java/com/teamwizardry/wizardry/common/world/biome/BiomeUnderWorld.java
index b1b4eca70..d5f63ff4a 100644
--- a/src/main/java/com/teamwizardry/wizardry/common/world/biome/BiomeUnderWorld.java
+++ b/src/main/java/com/teamwizardry/wizardry/common/world/biome/BiomeUnderWorld.java
@@ -15,7 +15,6 @@
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving.SpawnPlacementType;
import net.minecraft.init.Blocks;
-import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockPos.MutableBlockPos;
@@ -24,7 +23,6 @@
import net.minecraft.world.biome.Biome;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
-import net.minecraftforge.fml.common.registry.EntityRegistry;
/**
* Created by Demoniaque44
diff --git a/src/main/java/com/teamwizardry/wizardry/common/world/underworld/ChunkGeneratorUnderWorld.java b/src/main/java/com/teamwizardry/wizardry/common/world/underworld/ChunkGeneratorUnderWorld.java
index a51f1bede..a08ee15e2 100644
--- a/src/main/java/com/teamwizardry/wizardry/common/world/underworld/ChunkGeneratorUnderWorld.java
+++ b/src/main/java/com/teamwizardry/wizardry/common/world/underworld/ChunkGeneratorUnderWorld.java
@@ -1,17 +1,9 @@
package com.teamwizardry.wizardry.common.world.underworld;
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
+import com.teamwizardry.wizardry.api.ConfigValues;
import com.teamwizardry.wizardry.api.util.RandUtil;
-import com.teamwizardry.wizardry.api.util.RandUtilSeed;
import com.teamwizardry.wizardry.common.block.BlockCloud;
import com.teamwizardry.wizardry.init.ModBlocks;
-
import kotlin.Pair;
import net.minecraft.entity.EnumCreatureType;
import net.minecraft.init.Blocks;
@@ -24,11 +16,17 @@
import net.minecraft.world.gen.IChunkGenerator;
import net.minecraft.world.gen.NoiseGeneratorPerlin;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Random;
+
/**
* Created by Demoniaque44
*/
-public class ChunkGeneratorUnderWorld implements IChunkGenerator
-{
+public class ChunkGeneratorUnderWorld implements IChunkGenerator {
private static final int UPPER_LEVEL = 102;
private static final int LOWER_LEVEL = 105;
private static final double UPPER_X_SCALE = 12.0;
@@ -37,54 +35,47 @@ public class ChunkGeneratorUnderWorld implements IChunkGenerator
private static final double LOWER_X_SCALE = 16.0;
private static final double LOWER_Y_SCALE = 1.75;
private static final double LOWER_Z_SCALE = 16.0;
+ private final UnderWorldBoat boat = new UnderWorldBoat();
- private NoiseGeneratorPerlin upper;
- private NoiseGeneratorPerlin lower;
+ private final NoiseGeneratorPerlin upper;
+ private final NoiseGeneratorPerlin lower;
- private World world;
+ private Random random;
+ private final World world;
- public ChunkGeneratorUnderWorld(World worldIn)
- {
+ public ChunkGeneratorUnderWorld(World worldIn) {
this.world = worldIn;
upper = new NoiseGeneratorPerlin(RandUtil.random, 4);
lower = new NoiseGeneratorPerlin(RandUtil.random, 4);
}
- public ChunkGeneratorUnderWorld(World world, long seed)
- {
+ public ChunkGeneratorUnderWorld(World world, long seed) {
this.world = world;
- RandUtilSeed rand = new RandUtilSeed(seed);
- upper = new NoiseGeneratorPerlin(rand.random, 4);
- lower = new NoiseGeneratorPerlin(rand.random, 4);
+ this.random = new Random(seed);
+ upper = new NoiseGeneratorPerlin(random, 4);
+ lower = new NoiseGeneratorPerlin(random, 4);
}
- private List> generate(int chunkX, int chunkZ, ChunkPrimer primer)
- {
+ private List> generate(int chunkX, int chunkZ, ChunkPrimer primer) {
double[][] upperValues = new double[16][16];
double[][] lowerValues = new double[16][16];
- for (int x = 0; x < 16; x++)
- {
- for (int z = 0; z < 16; z++)
- {
+ for (int x = 0; x < 16; x++) {
+ for (int z = 0; z < 16; z++) {
upperValues[x][z] = upper.getValue((chunkX * 16 + x) / UPPER_X_SCALE, (chunkZ * 16 + z) / UPPER_Z_SCALE);
lowerValues[x][z] = lower.getValue((chunkX * 16 + x) / LOWER_X_SCALE, (chunkZ * 16 + z) / LOWER_Z_SCALE);
}
}
List> litBlocks = new LinkedList<>();
- for (int x = 0; x < 16; x++)
- {
- for (int z = 0; z < 16; z++)
- {
+ for (int x = 0; x < 16; x++) {
+ for (int z = 0; z < 16; z++) {
int minY = (int) (lowerValues[x][z] * LOWER_Y_SCALE + LOWER_LEVEL);
int maxY = (int) (upperValues[x][z] * UPPER_Y_SCALE + UPPER_LEVEL);
litBlocks.add(new Pair<>(new BlockPos(chunkX * 16 + x, minY, chunkZ * 16 + z), new BlockPos(chunkX * 16 + x, maxY, chunkZ * 16 + z)));
- for (int y = minY; y <= maxY; y++)
- {
+ for (int y = minY; y <= maxY; y++) {
if (y == minY)
primer.setBlockState(x, y, z, ModBlocks.CLOUD.getDefaultState().withProperty(BlockCloud.HAS_LIGHT_VALUE, true));
- else
- {
+ else {
// if (y >= minY + 6 && y <= maxY - 6)
// primer.setBlockState(x, y, z,
// ModFluids.LETHE.getActualBlock().getDefaultState());
@@ -99,8 +90,7 @@ private List> generate(int chunkX, int chunkZ, ChunkPri
@Nonnull
@Override
- public Chunk generateChunk(int x, int z)
- {
+ public Chunk generateChunk(int x, int z) {
ChunkPrimer chunkprimer = new ChunkPrimer();
// Get a list of blocks to check lighting for, as a "side effect" of
@@ -109,25 +99,35 @@ public Chunk generateChunk(int x, int z)
Chunk chunk = new Chunk(world, chunkprimer, x, z);
- litBlocks.forEach(pair ->
- {
+ litBlocks.forEach(pair -> {
BlockPos lower = pair.getFirst();
BlockPos upper = pair.getSecond();
- for (int i = 0; i < 15; i++)
- {
+ for (int i = 0; i < 15; i++) {
if (lower.getY() + i > upper.getY()) return;
chunk.setLightFor(EnumSkyBlock.BLOCK, lower.up(i), 15 - i);
}
});
-
+
return chunk;
}
@Override
- public void populate(int x, int z)
- {
- if (x / 16 == 0 && z / 16 == 0)
- {
+ public void populate(int x, int z) {
+ // Set the seed to the world random
+ random.setSeed(world.getSeed());
+ long l = random.nextLong() / 2L * 2L + 1L;
+ long i1 = random.nextLong() / 2L * 2L + 1L;
+ this.random.setSeed((x * l) + (z * i1) ^ world.getSeed());
+
+ // Generate the boat
+ if (this.random.nextInt(ConfigValues.underworldBoatChance) == 0) {
+ int i = x * 16 + this.random.nextInt(16);
+ int k = z * 16 + this.random.nextInt(16);
+ this.boat.generate(this.world, this.random, new BlockPos(i, 108, k));
+ }
+
+
+ if (x / 16 == 0 && z / 16 == 0) {
for (int i = -3; i < 3; i++)
for (int j = -3; j < 3; j++)
world.setBlockState(new BlockPos(i, 100, j), Blocks.OBSIDIAN.getDefaultState());
@@ -139,32 +139,28 @@ public void populate(int x, int z)
}
@Override
- public boolean generateStructures(@Nonnull Chunk chunkIn, int x, int z)
- {
+ public boolean generateStructures(@Nonnull Chunk chunkIn, int x, int z) {
return false;
}
@Nonnull
@Override
- public List getPossibleCreatures(@Nonnull EnumCreatureType creatureType, @Nonnull BlockPos pos)
- {
+ public List getPossibleCreatures(@Nonnull EnumCreatureType creatureType, @Nonnull BlockPos pos) {
return new ArrayList<>();
}
@Nullable
@Override
- public BlockPos getNearestStructurePos(@Nonnull World worldIn, @Nonnull String structureName, @Nonnull BlockPos position, boolean findUnexplored)
- {
+ public BlockPos getNearestStructurePos(@Nonnull World worldIn, @Nonnull String structureName, @Nonnull BlockPos position, boolean findUnexplored) {
return null;
}
@Override
- public void recreateStructures(@Nonnull Chunk chunkIn, int x, int z)
- {}
+ public void recreateStructures(@Nonnull Chunk chunkIn, int x, int z) {
+ }
@Override
- public boolean isInsideStructure(@Nonnull World worldIn, @Nonnull String structureName, @Nonnull BlockPos pos)
- {
+ public boolean isInsideStructure(@Nonnull World worldIn, @Nonnull String structureName, @Nonnull BlockPos pos) {
return false;
}
}
diff --git a/src/main/java/com/teamwizardry/wizardry/common/world/underworld/UnderWorldBoat.java b/src/main/java/com/teamwizardry/wizardry/common/world/underworld/UnderWorldBoat.java
new file mode 100644
index 000000000..5d36c60a9
--- /dev/null
+++ b/src/main/java/com/teamwizardry/wizardry/common/world/underworld/UnderWorldBoat.java
@@ -0,0 +1,54 @@
+package com.teamwizardry.wizardry.common.world.underworld;
+
+import com.teamwizardry.wizardry.Wizardry;
+import com.teamwizardry.wizardry.proxy.CommonProxy;
+import net.minecraft.init.Blocks;
+import net.minecraft.server.MinecraftServer;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.tileentity.TileEntityChest;
+import net.minecraft.util.Mirror;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.util.Rotation;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.world.World;
+import net.minecraft.world.gen.feature.WorldGenerator;
+import net.minecraft.world.gen.structure.template.PlacementSettings;
+import net.minecraft.world.gen.structure.template.Template;
+import net.minecraft.world.gen.structure.template.TemplateManager;
+
+import java.util.Map;
+import java.util.Random;
+
+public class UnderWorldBoat extends WorldGenerator {
+
+ @Override
+ public boolean generate(World world, Random rand, BlockPos position) {
+ MinecraftServer minecraftServer = world.getMinecraftServer();
+ TemplateManager templateManager = world.getSaveHandler().getStructureTemplateManager();
+ Template underworldBoat = templateManager.getTemplate(minecraftServer, new ResourceLocation(Wizardry.MODID, "underworld_boat"));
+
+ PlacementSettings placementSettings = new PlacementSettings();
+ Rotation rotation = Rotation.values()[rand.nextInt(Rotation.values().length)];
+ placementSettings.setIgnoreEntities(false).setMirror(Mirror.NONE).setRotation(rotation).setIgnoreStructureBlock(false);
+
+ underworldBoat.addBlocksToWorld(world, position, placementSettings);
+
+ // Get the data blocks to add custom loot to the boat
+ Map dataBlocks = underworldBoat.getDataBlocks(position, placementSettings);
+ for (Map.Entry entry : dataBlocks.entrySet()) {
+ if (entry.getValue().equals("lootchest")) {
+ BlockPos blockPos = entry.getKey();
+ world.setBlockState(blockPos, Blocks.AIR.getDefaultState(), 3);
+ TileEntity tileEntity = world.getTileEntity(blockPos.down());
+
+ if (tileEntity instanceof TileEntityChest) {
+ ((TileEntityChest) tileEntity).setLootTable(CommonProxy.UNDERWORLD_BOAT_CHEST, rand.nextLong());
+ }
+ }
+ }
+
+
+ return true;
+ }
+
+}
diff --git a/src/main/java/com/teamwizardry/wizardry/init/ModBiomes.java b/src/main/java/com/teamwizardry/wizardry/init/ModBiomes.java
index c25cdb7a0..d73c09ae3 100644
--- a/src/main/java/com/teamwizardry/wizardry/init/ModBiomes.java
+++ b/src/main/java/com/teamwizardry/wizardry/init/ModBiomes.java
@@ -1,7 +1,5 @@
package com.teamwizardry.wizardry.init;
-import com.teamwizardry.wizardry.common.world.biome.BiomeTorikki;
-import com.teamwizardry.wizardry.common.world.biome.BiomeTorikkiSea;
import com.teamwizardry.wizardry.common.world.biome.BiomeUnderWorld;
import net.minecraft.world.biome.Biome;
import net.minecraftforge.common.BiomeDictionary;
diff --git a/src/main/java/com/teamwizardry/wizardry/init/ModEntities.java b/src/main/java/com/teamwizardry/wizardry/init/ModEntities.java
index 0013a2670..ba90e881a 100644
--- a/src/main/java/com/teamwizardry/wizardry/init/ModEntities.java
+++ b/src/main/java/com/teamwizardry/wizardry/init/ModEntities.java
@@ -5,7 +5,6 @@
import com.teamwizardry.wizardry.client.render.entity.ModelSpiritBlight;
import com.teamwizardry.wizardry.client.render.entity.ModelSpiritWight;
import com.teamwizardry.wizardry.client.render.entity.ModelUnicorn;
-import com.teamwizardry.wizardry.client.render.entity.ModelZachriel;
import com.teamwizardry.wizardry.client.render.entity.RenderBomb;
import com.teamwizardry.wizardry.client.render.entity.RenderFairy;
import com.teamwizardry.wizardry.client.render.entity.RenderHaloInfusionItem;
@@ -15,8 +14,6 @@
import com.teamwizardry.wizardry.client.render.entity.RenderSpiritWight;
import com.teamwizardry.wizardry.client.render.entity.RenderSummonZombie;
import com.teamwizardry.wizardry.client.render.entity.RenderUnicorn;
-import com.teamwizardry.wizardry.client.render.entity.RenderZachriel;
-import com.teamwizardry.wizardry.client.render.entity.RenderZachrielCorruption;
import com.teamwizardry.wizardry.common.entity.EntityBackupZombie;
import com.teamwizardry.wizardry.common.entity.EntityBomb;
import com.teamwizardry.wizardry.common.entity.EntityFairy;
@@ -25,8 +22,6 @@
import com.teamwizardry.wizardry.common.entity.EntitySpiritBlight;
import com.teamwizardry.wizardry.common.entity.EntitySpiritWight;
import com.teamwizardry.wizardry.common.entity.EntityUnicorn;
-import com.teamwizardry.wizardry.common.entity.angel.zachriel.EntityCorruptionProjectile;
-import com.teamwizardry.wizardry.common.entity.angel.zachriel.EntityZachriel;
import com.teamwizardry.wizardry.common.entity.projectile.EntityLightningProjectile;
import com.teamwizardry.wizardry.common.entity.projectile.EntitySpellProjectile;
diff --git a/src/main/java/com/teamwizardry/wizardry/proxy/CommonProxy.java b/src/main/java/com/teamwizardry/wizardry/proxy/CommonProxy.java
index de4bf4d97..79a7338d9 100644
--- a/src/main/java/com/teamwizardry/wizardry/proxy/CommonProxy.java
+++ b/src/main/java/com/teamwizardry/wizardry/proxy/CommonProxy.java
@@ -23,7 +23,6 @@
import com.teamwizardry.wizardry.common.module.effects.ModuleEffectLeap;
import com.teamwizardry.wizardry.common.module.effects.ModuleEffectTimeSlow;
import com.teamwizardry.wizardry.common.network.*;
-import com.teamwizardry.wizardry.common.world.trickery.WorldProviderTorikki;
import com.teamwizardry.wizardry.common.world.underworld.WorldProviderUnderWorld;
import com.teamwizardry.wizardry.crafting.burnable.FireRecipes;
import com.teamwizardry.wizardry.crafting.mana.ManaRecipes;
@@ -31,7 +30,9 @@
import com.teamwizardry.wizardry.init.plugin.PluginLoaderContext;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumHand;
+import net.minecraft.util.ResourceLocation;
import net.minecraft.world.DimensionType;
+import net.minecraft.world.storage.loot.LootTableList;
import net.minecraftforge.common.DimensionManager;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
@@ -46,6 +47,7 @@
public class CommonProxy {
private File directory;
+ public static final ResourceLocation UNDERWORLD_BOAT_CHEST = new ResourceLocation(Wizardry.MODID, "underworld_boat_chest");
public File getWizardryDirectory() {
return directory;
@@ -81,6 +83,9 @@ public void preInit(FMLPreInitializationEvent event) {
NetworkRegistry.INSTANCE.registerGuiHandler(Wizardry.instance, new GuiHandler());
+ // Loot tables
+ LootTableList.register(UNDERWORLD_BOAT_CHEST);
+
Wizardry.underWorld = DimensionType.register("underworld", "_dim", ConfigValues.underworldID, WorldProviderUnderWorld.class, false);
// Wizardry.torikki = DimensionType.register("torikki", "_dim", ConfigValues.torikkiID, WorldProviderTorikki.class, false);
DimensionManager.registerDimension(ConfigValues.underworldID, Wizardry.underWorld);
diff --git a/src/main/resources/assets/wizardry/loot_tables/underworld_boat_chest.json b/src/main/resources/assets/wizardry/loot_tables/underworld_boat_chest.json
new file mode 100644
index 000000000..fbf048f41
--- /dev/null
+++ b/src/main/resources/assets/wizardry/loot_tables/underworld_boat_chest.json
@@ -0,0 +1,53 @@
+{
+ "pools": [
+ {
+ "name": "common",
+ "rolls": {
+ "min": 5,
+ "max": 10
+ },
+ "entries": [
+ {
+ "type": "item",
+ "weight": 15,
+ "name": "wizardry:fairy_dust"
+ },
+ {
+ "type": "item",
+ "weight": 5,
+ "name": "wizardry:fairy_wings"
+ },
+ {
+ "type": "item",
+ "weight": 2,
+ "name": "wizardry:unicorn_horn"
+ },
+ {
+ "type": "item",
+ "weight": 20,
+ "name": "wizardry:wisdom_sapling",
+ "functions": [
+ {
+ "function": "set_count",
+ "count": {
+ "min": 1,
+ "max": 4
+ }
+ }
+ ]
+ },
+ {
+ "type": "item",
+ "weight": 2,
+ "name": "wizardry:orb",
+ "functions": [
+ {
+ "function": "set_nbt",
+ "tag": "{mana:10}"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/wizardry/structures/underworld_boat.nbt b/src/main/resources/assets/wizardry/structures/underworld_boat.nbt
new file mode 100644
index 000000000..351293068
Binary files /dev/null and b/src/main/resources/assets/wizardry/structures/underworld_boat.nbt differ