public void Realize()
    {
        if (realizedObject != null)
        {
            return;
        }
        switch ((patch_AbstractPhysicalObject.AbstractObjectType)type)
        {
        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.Rock:
            realizedObject = new Rock(this, world);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.Spear:
            if (((this as AbstractPhysicalObject) as AbstractSpear).explosive)
            {
                realizedObject = new ExplosiveSpear(this, world);
            }
            else
            {
                realizedObject = new Spear(this, world);
            }
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.FlareBomb:
            realizedObject = new FlareBomb(this, world);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.VultureMask:
            realizedObject = new VultureMask(this, world);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.PuffBall:
            realizedObject = new PuffBall(this, world);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.DangleFruit:
            realizedObject = new DangleFruit(this);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.PebblesPearl:
            realizedObject = new PebblesPearl(this, world);
            break;

        //case (patch_AbstractPhysicalObject.AbstractObjectType)patch_AbstractPhysicalObject.AbstractObjectType.MoonPearl:
        //    this.realizedObject = new MoonPearl(this, this.world);
        //    break;
        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.SLOracleSwarmer:
            realizedObject = new SLOracleSwarmer(this, world);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.SSOracleSwarmer:
            realizedObject = new SSOracleSwarmer(this, world);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractObjectType.LMOracleSwarmer:
            realizedObject = new LMOracleSwarmer(this, world);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.DataPearl:
            realizedObject = new DataPearl(this, world);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.SeedCob:
            realizedObject = new SeedCob(this);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.WaterNut:
            if (((this as AbstractPhysicalObject) as WaterNut.AbstractWaterNut).swollen)
            {
                realizedObject = new SwollenWaterNut(this);
            }
            else
            {
                realizedObject = new WaterNut(this);
            }
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.JellyFish:
            realizedObject = new JellyFish(this);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.Lantern:
            realizedObject = new Lantern(this);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.KarmaFlower:
            realizedObject = new KarmaFlower(this);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.Mushroom:
            realizedObject = new Mushroom(this);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.VoidSpawn:
            realizedObject = new VoidSpawn(this, (Room.realizedRoom == null) ? 0f : Room.realizedRoom.roomSettings.GetEffectAmount(RoomSettings.RoomEffect.Type.VoidMelt), Room.realizedRoom != null && VoidSpawnKeeper.DayLightMode(Room.realizedRoom));
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.FirecrackerPlant:
            realizedObject = new FirecrackerPlant(this, world);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)(patch_AbstractPhysicalObject.AbstractObjectType) AbstractPhysicalObject.AbstractObjectType.SlimeMold:
            realizedObject = new SlimeMold(this);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.FlyLure:
            realizedObject = new FlyLure(this, world);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.ScavengerBomb:
            realizedObject = new ScavengerBomb(this, world);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.SporePlant:
            realizedObject = new SporePlant(this, world);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.EggBugEgg:
            realizedObject = new EggBugEgg(this);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.NeedleEgg:
            realizedObject = new NeedleEgg(this);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.DartMaggot:
            realizedObject = new DartMaggot(this);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.BubbleGrass:
            realizedObject = new BubbleGrass(this);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.NSHSwarmer:
            realizedObject = new NSHSwarmer(this);
            break;

        case (patch_AbstractPhysicalObject.AbstractObjectType)AbstractPhysicalObject.AbstractObjectType.OverseerCarcass:
            realizedObject = new OverseerCarcass(this, world);
            break;

        case AbstractObjectType.SmallPiston:
            realizedObject = new SmallPiston(this);
            break;

        case AbstractObjectType.LargePiston:
            realizedObject = new LargePiston(this);
            break;

        case AbstractObjectType.GiantPiston:
            realizedObject = new GiantPiston(this);
            break;
        }
        for (int i = 0; i < stuckObjects.Count; i++)
        {
            if (stuckObjects[i].A.realizedObject == null && stuckObjects[i].A != this)
            {
                stuckObjects[i].A.Realize();
            }
            if (stuckObjects[i].B.realizedObject == null && stuckObjects[i].B != this)
            {
                stuckObjects[i].B.Realize();
            }
        }
    }
        public void OriginalRealize()
        {
            try {
                if (this.realizedObject != null)
                {
                    return;
                }
            } catch (Exception e) {
                Debug.LogError("Failed On Realize Object Check");
            }


            try {
                switch (this.type)
                {
                case AbstractPhysicalObject.AbstractObjectType.Rock:
                    this.realizedObject = new Rock(this, this.world);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.Spear:
                    if ((this as AbstractPhysicalObject as AbstractSpear).explosive)
                    {
                        this.realizedObject = new ExplosiveSpear(this, this.world);
                    }
                    else
                    {
                        this.realizedObject = new Spear(this, this.world);
                    }
                    break;

                case AbstractPhysicalObject.AbstractObjectType.FlareBomb:
                    this.realizedObject = new FlareBomb(this, this.world);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.VultureMask:
                    this.realizedObject = new VultureMask(this, this.world);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.PuffBall:
                    this.realizedObject = new PuffBall(this, this.world);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.DangleFruit:
                    this.realizedObject = new DangleFruit(this);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.PebblesPearl:
                    this.realizedObject = new PebblesPearl(this, this.world);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.SLOracleSwarmer:
                    this.realizedObject = new SLOracleSwarmer(this, this.world);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.SSOracleSwarmer:
                    this.realizedObject = new SSOracleSwarmer(this, this.world);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.DataPearl:
                    this.realizedObject = new DataPearl(this, this.world);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.SeedCob:
                    this.realizedObject = new SeedCob(this);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.WaterNut:
                    if ((this as AbstractPhysicalObject as WaterNut.AbstractWaterNut).swollen)
                    {
                        this.realizedObject = new SwollenWaterNut(this);
                    }
                    else
                    {
                        this.realizedObject = new WaterNut(this);
                    }
                    break;

                case AbstractPhysicalObject.AbstractObjectType.JellyFish:
                    this.realizedObject = new JellyFish(this);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.Lantern:
                    this.realizedObject = new Lantern(this);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.KarmaFlower:
                    this.realizedObject = new KarmaFlower(this);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.Mushroom:
                    this.realizedObject = new Mushroom(this);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.VoidSpawn:
                    this.realizedObject = new VoidSpawn(this, (base.Room.realizedRoom == null) ? 0f : base.Room.realizedRoom.roomSettings.GetEffectAmount(RoomSettings.RoomEffect.Type.VoidMelt), base.Room.realizedRoom != null && VoidSpawnKeeper.DayLightMode(base.Room.realizedRoom));
                    break;

                case AbstractPhysicalObject.AbstractObjectType.FirecrackerPlant:
                    this.realizedObject = new FirecrackerPlant(this, this.world);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.SlimeMold:
                    this.realizedObject = new SlimeMold(this);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.FlyLure:
                    this.realizedObject = new FlyLure(this, this.world);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.ScavengerBomb:
                    this.realizedObject = new ScavengerBomb(this, this.world);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.SporePlant:
                    this.realizedObject = new SporePlant(this, this.world);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.EggBugEgg:
                    this.realizedObject = new EggBugEgg(this);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.NeedleEgg:
                    this.realizedObject = new NeedleEgg(this);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.DartMaggot:
                    this.realizedObject = new DartMaggot(this);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.BubbleGrass:
                    this.realizedObject = new BubbleGrass(this);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.NSHSwarmer:
                    this.realizedObject = new NSHSwarmer(this);
                    break;

                case AbstractPhysicalObject.AbstractObjectType.OverseerCarcass:
                    this.realizedObject = new OverseerCarcass(this, this.world);
                    break;
                }
            } catch (Exception e) {
                Debug.LogError(string.Format("Failed on realized object creation, world is {0}, type is {1}, and this is {2}", world, type, this));
            }

            try {
                for (int i = 0; i < this.stuckObjects.Count; i++)
                {
                    if (this.stuckObjects[i].A.realizedObject == null && this.stuckObjects[i].A != this)
                    {
                        this.stuckObjects[i].A.Realize();
                    }
                    if (this.stuckObjects[i].B.realizedObject == null && this.stuckObjects[i].B != this)
                    {
                        this.stuckObjects[i].B.Realize();
                    }
                }
            } catch (Exception e) {
                Debug.LogError("Failed on Stuck Realization");
            }
        }