From 447d102029c50e2e3cdb1ad410f4fe60759c119a Mon Sep 17 00:00:00 2001 From: Pelotrio <45769595+Pelotrio@users.noreply.github.com> Date: Mon, 27 Jun 2022 01:11:33 +0200 Subject: [PATCH 1/6] Removed unused imports Took 15 minutes Took 3 minutes --- .../com/teamwizardry/wizardry/Wizardry.java | 1 - .../miscdata/MiscCapabilityStorage.java | 1 - .../api/spell/module/IModuleEvent.java | 6 +++- .../client/core/renderer/HudRenderer.java | 1 - .../gui/worktable/ComponentModifiers.java | 1 - .../block/BlockUnderworldTeleporter.java | 12 -------- .../block/wisdomwood/BlockWisdomSapling.java | 1 - .../command/CommandTeleportTorikki.java | 2 -- .../wizardry/common/entity/EntityFairy.java | 1 - .../common/item/ItemFairyImbuedApple.java | 1 - .../wizardry/common/item/ItemMagicWand.java | 2 -- .../wizardry/common/item/ItemStaff.java | 2 -- .../common/item/halos/ItemFakeHaloBauble.java | 1 - .../module/effects/ModuleEffectBackup.java | 11 ------- .../module/effects/ModuleEffectThrive.java | 10 ------- .../module/effects/ModuleEffectTimeLock.java | 30 ------------------- .../network/PacketClearCraftingPlate.java | 1 - .../common/network/PacketThriveBlock.java | 3 ++ .../common/potion/PotionTimeLock.java | 14 --------- .../common/potion/PotionTimeSlow.java | 4 --- .../common/tile/TileUnderworldPortal.java | 1 - .../common/world/biome/BiomeUnderWorld.java | 2 -- .../teamwizardry/wizardry/init/ModBiomes.java | 2 -- .../wizardry/init/ModEntities.java | 5 ---- .../wizardry/proxy/CommonProxy.java | 1 - 25 files changed, 8 insertions(+), 108 deletions(-) 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/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/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/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/network/PacketThriveBlock.java b/src/main/java/com/teamwizardry/wizardry/common/network/PacketThriveBlock.java index f52aad1b2..9f28f5aac 100644 --- a/src/main/java/com/teamwizardry/wizardry/common/network/PacketThriveBlock.java +++ b/src/main/java/com/teamwizardry/wizardry/common/network/PacketThriveBlock.java @@ -20,6 +20,9 @@ public class PacketThriveBlock extends PacketBase { @Save public BlockPos pos; + public PacketThriveBlock() { + } + public PacketThriveBlock(BlockPos lower) { pos = lower; } 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/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..0cc2159ac 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; From 2d56911d829963663d6b4f7a60f828cabb9ca979 Mon Sep 17 00:00:00 2001 From: Pelotrio <45769595+Pelotrio@users.noreply.github.com> Date: Wed, 29 Jun 2022 16:39:47 +0200 Subject: [PATCH 2/6] Boat now generates correctly in underworld dimension Took 3 hours 30 minutes --- .../wizardry/api/ConfigValues.java | 3 + .../underworld/ChunkGeneratorUnderWorld.java | 108 +++++++++--------- .../world/underworld/UnderWorldBoat.java | 33 ++++++ .../wizardry/structures/underworld_boat.nbt | Bin 0 -> 38342 bytes 4 files changed, 88 insertions(+), 56 deletions(-) create mode 100644 src/main/java/com/teamwizardry/wizardry/common/world/underworld/UnderWorldBoat.java create mode 100644 src/main/resources/assets/wizardry/structures/underworld_boat.nbt 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/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..790795c1a --- /dev/null +++ b/src/main/java/com/teamwizardry/wizardry/common/world/underworld/UnderWorldBoat.java @@ -0,0 +1,33 @@ +package com.teamwizardry.wizardry.common.world.underworld; + +import com.teamwizardry.wizardry.Wizardry; +import net.minecraft.server.MinecraftServer; +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.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 underworld_boat = 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); + underworld_boat.addBlocksToWorld(world, position, placementsettings); + + return true; + } + +} 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 0000000000000000000000000000000000000000..84d306dbb31b1b50e4722d6e0a1253f7db4114c3 GIT binary patch literal 38342 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 Date: Wed, 29 Jun 2022 17:59:43 +0200 Subject: [PATCH 3/6] Boat now comes with a set of enemies and available loot chests Took 1 hour 4 minutes --- .../wizardry/structures/underworld_boat.nbt | Bin 38342 -> 32816 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/wizardry/structures/underworld_boat.nbt b/src/main/resources/assets/wizardry/structures/underworld_boat.nbt index 84d306dbb31b1b50e4722d6e0a1253f7db4114c3..3512930687dcf1a1ad348410880385101a71115b 100644 GIT binary patch literal 32816 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 literal 38342 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 Date: Wed, 29 Jun 2022 18:01:20 +0200 Subject: [PATCH 4/6] Loot chest get now filled with loot Took 2 minutes --- .../common/network/PacketThriveBlock.java | 3 -- .../world/underworld/UnderWorldBoat.java | 34 +++++++++++++++---- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/teamwizardry/wizardry/common/network/PacketThriveBlock.java b/src/main/java/com/teamwizardry/wizardry/common/network/PacketThriveBlock.java index 9f28f5aac..f52aad1b2 100644 --- a/src/main/java/com/teamwizardry/wizardry/common/network/PacketThriveBlock.java +++ b/src/main/java/com/teamwizardry/wizardry/common/network/PacketThriveBlock.java @@ -20,9 +20,6 @@ public class PacketThriveBlock extends PacketBase { @Save public BlockPos pos; - public PacketThriveBlock() { - } - public PacketThriveBlock(BlockPos lower) { pos = lower; } 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 index 790795c1a..352781b94 100644 --- a/src/main/java/com/teamwizardry/wizardry/common/world/underworld/UnderWorldBoat.java +++ b/src/main/java/com/teamwizardry/wizardry/common/world/underworld/UnderWorldBoat.java @@ -1,7 +1,10 @@ package com.teamwizardry.wizardry.common.world.underworld; import com.teamwizardry.wizardry.Wizardry; +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; @@ -11,21 +14,40 @@ 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 net.minecraft.world.storage.loot.LootTableList; +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 underworld_boat = templatemanager.getTemplate(minecraftserver, new ResourceLocation(Wizardry.MODID, "underworld_boat")); + MinecraftServer minecraftServer = world.getMinecraftServer(); + TemplateManager templateManager = world.getSaveHandler().getStructureTemplateManager(); + Template underworldBoat = templateManager.getTemplate(minecraftServer, new ResourceLocation(Wizardry.MODID, "underworld_boat")); - PlacementSettings placementsettings = new PlacementSettings(); + PlacementSettings placementSettings = new PlacementSettings(); Rotation rotation = Rotation.values()[rand.nextInt(Rotation.values().length)]; - placementsettings.setIgnoreEntities(false).setMirror(Mirror.NONE).setRotation(rotation); - underworld_boat.addBlocksToWorld(world, position, placementsettings); + 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) { + //TODO add custom loot the boat + ((TileEntityChest) tileEntity).setLootTable(LootTableList.CHESTS_IGLOO_CHEST, rand.nextLong()); + } + } + } + return true; } From a976f9d3f8b5bca886384c27b24171e4f92fa27e Mon Sep 17 00:00:00 2001 From: Pelotrio <45769595+Pelotrio@users.noreply.github.com> Date: Fri, 1 Jul 2022 01:28:06 +0200 Subject: [PATCH 5/6] Added custom loot table (wip) Took 1 hour 19 minutes --- .../world/underworld/UnderWorldBoat.java | 5 +- .../wizardry/proxy/CommonProxy.java | 6 +++ .../loot_tables/underworld_boat_chest.json | 53 +++++++++++++++++++ 3 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/assets/wizardry/loot_tables/underworld_boat_chest.json 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 index 352781b94..5d36c60a9 100644 --- a/src/main/java/com/teamwizardry/wizardry/common/world/underworld/UnderWorldBoat.java +++ b/src/main/java/com/teamwizardry/wizardry/common/world/underworld/UnderWorldBoat.java @@ -1,6 +1,7 @@ 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; @@ -14,7 +15,6 @@ 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 net.minecraft.world.storage.loot.LootTableList; import java.util.Map; import java.util.Random; @@ -42,8 +42,7 @@ public boolean generate(World world, Random rand, BlockPos position) { TileEntity tileEntity = world.getTileEntity(blockPos.down()); if (tileEntity instanceof TileEntityChest) { - //TODO add custom loot the boat - ((TileEntityChest) tileEntity).setLootTable(LootTableList.CHESTS_IGLOO_CHEST, rand.nextLong()); + ((TileEntityChest) tileEntity).setLootTable(CommonProxy.UNDERWORLD_BOAT_CHEST, rand.nextLong()); } } } diff --git a/src/main/java/com/teamwizardry/wizardry/proxy/CommonProxy.java b/src/main/java/com/teamwizardry/wizardry/proxy/CommonProxy.java index 0cc2159ac..79a7338d9 100644 --- a/src/main/java/com/teamwizardry/wizardry/proxy/CommonProxy.java +++ b/src/main/java/com/teamwizardry/wizardry/proxy/CommonProxy.java @@ -30,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; @@ -45,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; @@ -80,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 From d1f64a999133ee7be7b44977c4c0d4b5b296d0bf Mon Sep 17 00:00:00 2001 From: Pelotrio <45769595+Pelotrio@users.noreply.github.com> Date: Tue, 5 Jul 2022 19:11:31 +0200 Subject: [PATCH 6/6] Fixed crash with spells that use a client side only method Took 1 hour 33 minutes --- .../wizardry/common/module/effects/ModuleEffectFrost.java | 4 ++-- .../common/module/effects/ModuleEffectLowGravity.java | 4 ++-- .../wizardry/common/module/effects/ModuleEffectTimeSlow.java | 4 ++-- .../common/module/effects/vanish/ModuleEffectVanish.java | 5 +++-- 4 files changed, 9 insertions(+), 8 deletions(-) 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/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) {