Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[1.12.2] Portal teleports player into blocks.


Blazesword2008
 Share

Recommended Posts

Hello. I have made a portal inside my mod to travel into my custom dimension. However, I'm noticing that whenever you travel through the portal on both sides, it keeps teleporting players into blocks. Any help? Here's my teleportation script:

 

package blazesword2008.randomcraft.world;

import blazesword2008.randomcraft.init.BlockInit;
import blazesword2008.randomcraft.objects.blocks.BlockEnderthPortal;
import it.unimi.dsi.fastutil.objects.ObjectIterator;
import net.minecraft.block.state.IBlockState;
import net.minecraft.block.state.pattern.BlockPattern.PatternHelper;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Blocks;
import net.minecraft.util.EnumFacing.Axis;
import net.minecraft.util.EnumFacing.AxisDirection;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockPos.MutableBlockPos;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.Teleporter;
import net.minecraft.world.World;
import net.minecraft.world.WorldServer;

public class DimensionTeleporter extends Teleporter
{
    public DimensionTeleporter(WorldServer world) {
        super(world);
    }
    
    @Override
    public void placeInPortal(Entity entity, float rotationYaw) 
    {
        if(this.world.provider.getDimensionType().getId() != 1) 
        {
            if(!this.placeInExistingPortal(entity, rotationYaw)) 
            {
                this.makePortal(entity);
                this.placeInExistingPortal(entity, rotationYaw);
            }
        
        } 
        else 
        {
            int i = MathHelper.floor(entity.posX);
            int    j = MathHelper.floor(entity.posY) - 1;
            int    k = MathHelper.floor(entity.posZ);
            int    l = 1;
            int    i1 = 0;
            
            for(int j1 = -2; j1 <= 2; ++j1) 
            {
                for(int k1 = -2; k1 <= 2; ++k1) 
                {
                    for(int l1 = -1; l1 <= 3; ++l1) 
                    {
                        int i2 = i + k1 * 1 + j1 * 0;
                        int j2 = j + l1;
                        int k2 = k + k1 * 0 - j1 * 1;
                        boolean flag = l1 < 0;
                        this.world.setBlockState(new BlockPos(i2, j2, k2), flag ? BlockInit.RHODOCHROSITE_BLOCK.getDefaultState() : Blocks.AIR.getDefaultState());
                    }
                }
            }
            
            entity.setLocationAndAngles((double)i, (double)j, (double)k, entity.rotationYaw, 0.0F);
            entity.motionX = 0.0D;
            entity.motionY = 0.0D;
            entity.motionZ = 0.0D;
        }
    }
    
    @Override
    public boolean placeInExistingPortal(Entity entity, float rotationYaw) 
    {
        int i = 128;
        double d0 = -1.0D;
        int j = MathHelper.floor(entity.posX);
        int    k = MathHelper.floor(entity.posZ);
        boolean flag = true;
        BlockPos pos = BlockPos.ORIGIN;
        long l = ChunkPos.asLong(j, k);
        
        if(this.destinationCoordinateCache.containsKey(l)) 
        {
            Teleporter.PortalPosition position = (Teleporter.PortalPosition)this.destinationCoordinateCache.get(l);
            d0 = 0.0D;
            pos = position;
            position.lastUpdateTime = this.world.getTotalWorldTime();
            flag = false;
        } 
        else 
        {
            BlockPos pos3 = new BlockPos(entity);
            
            for(int i1 = -128; i1 <= 128; ++i1) 
            {
                
                BlockPos pos2;
                
                for(int j1 = -128; j1 <= 128; ++j1) 
                {
                    
                    for(BlockPos pos1 = pos3.add(i1, this.world.getActualHeight() - 1 - pos3.getY(), j1); pos1.getY() >= 0; pos1 = pos2) 
                    {
                        pos2 = pos1.down();
                        
                        if(this.world.getBlockState(pos1).getBlock() == BlockInit.PORTAL) 
                        {
                            for(pos2 = pos1.down(); this.world.getBlockState(pos2).getBlock() == BlockInit.PORTAL; pos2 = pos2.down()) 
                            {
                                pos1 = pos2;
                            }
                            
                            double d1 = pos1.distanceSq(pos3);
                            
                            if(d0 < 0.0D || d1 < d0) 
                            {
                                d0 = d1;
                                pos = pos1;
                            }
                        }
                    }
                }
            }
        }
        
        if(d0 >= 0.0D) 
        {
            if(flag) 
            {
                this.destinationCoordinateCache.put(l, new Teleporter.PortalPosition(pos, this.world.getTotalWorldTime()));
            }
            
            double d5 = (double) pos.getX() + 0.5D;
            double d7 = (double) pos.getZ() + 0.5D;
            PatternHelper helper = BlockInit.PORTAL.createPatternHelper(world, pos);
            boolean flag1 = helper.getForwards().rotateY().getAxisDirection() == AxisDirection.NEGATIVE;
            double d2 = helper.getForwards().getAxis() == Axis.X ? (double) helper.getFrontTopLeft().getZ() : (double) helper.getFrontTopLeft().getX();
            double d6 = (double) (helper.getFrontTopLeft().getY() + 1) - entity.getLastPortalVec().y * (double) helper.getHeight();
            
            if(flag1) 
            {
                ++d2;
            }
            
            if(helper.getForwards().getAxis() == Axis.X) 
            {
                d7 = d2 + (1.0D - entity.getLastPortalVec().x) * (double) helper.getWidth() * (double) helper.getForwards().rotateY().getAxisDirection().getOffset();
            }
            else 
            {
                d5 = d2 + (1.0D - entity.getLastPortalVec().x) * (double) helper.getWidth() * (double) helper.getForwards().rotateY().getAxisDirection().getOffset();
            }
            
            float f = 0.0F; 
            float f1 = 0.0F; 
            float f2 = 0.0F;
            float f3 = 0.0F;
            
            if(helper.getForwards().getOpposite() == entity.getTeleportDirection()) 
            {
                f = 1.0F; 
                f1 = 1.0F;
            }
            else if(helper.getForwards().getOpposite() == entity.getTeleportDirection().getOpposite()) 
            {
                f = -1.0F;
                f1 = -1.0F;
            }
            else if(helper.getForwards().getOpposite() == entity.getTeleportDirection().rotateY()) 
            {
                f2 = 1.0F; 
                f3 = -1.0F;
            }
            else 
            {
                f2 = -1.0F; 
                f3 = 1.0F;
            }
            
            double d3 = entity.motionX;
            double d4 = entity.motionZ;
            entity.motionX = d3 * (double)f + d4 * (double)f3;
            entity.motionZ = d3 * (double)f2 + d4 * (double)f1;
            entity.rotationYaw = rotationYaw - (float)(entity.getTeleportDirection().getOpposite().getHorizontalIndex() * 90) + (float)(helper.getForwards().getHorizontalIndex() * 90);
            
            if(entity instanceof EntityPlayerMP) 
            {
                ((EntityPlayerMP) entity).connection.setPlayerLocation(d5, d6, d7, entity.rotationYaw, entity.rotationPitch);
            }
            else 
            {
                entity.setLocationAndAngles(d5, d6, d7, entity.rotationYaw, entity.rotationPitch);
            }
            
            return true;
        }
        else
        {
            return false;
        }
    }
    
    @Override
    public boolean makePortal(Entity entity) {
        int i = 16;
        double d0 = -1.0D;
        int j = MathHelper.floor(entity.posX),
            k = MathHelper.floor(entity.posY),
            l = MathHelper.floor(entity.posZ),
            i1 = j,
            j1 = k,
            k1 = l,
            l1 = 0,
            i2 = this.random.nextInt(4);
        MutableBlockPos pos = new MutableBlockPos();
        
        for(int j2 = j - 16; j2 <= j + 16; ++j2) {
            double d1 = (double) j2 +0.5D - entity.posX;
            
            for(int l2 = l - 16; l2 <= l + 16; ++l2) {
                double d2 = (double) l2 + 0.5D - entity.posZ;
                label293:
                
                for(int j3 = this.world.getActualHeight() - 1; j3 >= 0; --j3) {
                    if(this.world.isAirBlock(pos.setPos(j2, j3, l2))) {
                        while(j3 > 0 && this.world.isAirBlock(pos.setPos(j2, j3 - 1, l2))) --j3;
                        
                        for(int k3 = i2; k3 < i2 + 4; ++k3) {
                            int l3 = k3 % 2;
                            int i4 = 1 - l3;
                            
                            if(k3 % 4 >= 2) {
                                l3 = -l3;
                                i4 = -i4;
                            }
                            
                            for(int j4 = 0; j4 < 3; ++j4) {
                                for(int k4 = 0; k4 < 3; ++k4) {
                                    for(int l4 = -1; l4 < 4; ++l4) {
                                        int i5 = j2 + (k4 - 1) * l3 + j4 * i4;
                                        int j5 = j3 + l4;
                                        int k5 = l2 + (k4 - 1) * i4 - j4 * l3;
                                        pos.setPos(i5, j5, k5);
                                        
                                        if(l4 < 0 && !this.world.getBlockState(pos).getMaterial().isSolid() || l4 >= 0 && !this.world.isAirBlock(pos)) continue label293;
                                    }
                                }
                            }
                            
                            double d5 = (double)j3 + 0.5D - entity.posY;
                            double d7 = d1 * d1 + d5 * d5 + d2 * d2;
                            
                            if(d0 < 0.0D || d7 < d0) {
                                d0 = d7;
                                i1 = j2;
                                j1 = j3;
                                k1 = l2;
                                l1 = k3 % 4;
                            }
                        }
                    }
                }
            }
        }
        
        if(d0 < 0.0D) {
            for(int l5 = j - 16; l5 <= j + 16; ++l5) {
                double d3 = (double) l5 + 0.5D - entity.posX;

                for(int j6 = l - 16; j6 <= l + 16; ++j6) {
                    double d4 = (double)j6 + 0.5D - entity.posZ;
                    label231:

                        for(int i7 = this.world.getActualHeight() - 1; i7 >= 0; --i7) {
                            if(this.world.isAirBlock(pos.setPos(l5, i7, j6))) {
                                while(i7 > 0 && this.world.isAirBlock(pos.setPos(l5, i7 - 1, j6))) --i7;

                                for(int k7 = i2; k7 < i2 + 2; ++k7) {
                                    int j8 = k7 % 2;
                                    int j9 = 1 - j8;

                                    for(int j10 = 0; j10 < 4; ++j10) {
                                        for(int j11 = -1; j11 < 4; ++j11) {
                                            int j12 = l5 + (j10 - 1) * j8;
                                            int i13 = i7 + j11;
                                            int j13 = j6 + (j10 - 1) * j9;
                                            pos.setPos(j12, i13, j13);

                                            if(j11 < 0 && !this.world.getBlockState(pos).getMaterial().isSolid() || j11 >= 0 && !this.world.isAirBlock(pos)) continue label231;
                                        }
                                    }

                                    double d6 = (double) i7 + 0.5D - entity.posY;
                                    double d8 = d3 * d3 + d6 * d6 + d4 * d4;

                                    if(d0 < 0.0D || d8 < d0) {
                                        d0 = d8;
                                        i1 = l5;
                                        j1 = i7;
                                        k1 = j6;
                                        l1 = k7 % 2;
                                    }
                                }
                            }
                        }
                }
            }
        }

        int i6 = i1,
                k2 = j1,
                k6 = k1,
                l6 = l1 % 2,
                i3 = 1 - l6;

        if(l1 % 4 >= 2) {
            l6 = -l6;
            i3 = -i3;
        }

        if(d0 < 0.0D) {
            j1 = MathHelper.clamp(j1, 70, this.world.getActualHeight() - 10);
            k2 = j1;

            for(int j7 = -1; j7 <= 1; ++j7) {
                for(int l7 = 1; l7 < 3; ++l7) {
                    for(int k8 = -1; k8 < 3; ++k8) {
                        int k9 = i6 + (l7 - 1) * l6 + j7 * i3;
                        int k10 = k2 + k8;
                        int k11 = k6 + (l7 - 1) * i3 - j7 * l6;
                        boolean flag = k8 < 0;
                        this.world.setBlockState(new BlockPos(k9, k10, k11), flag ? BlockInit.RHODOCHROSITE_BLOCK.getDefaultState() : Blocks.AIR.getDefaultState());
                    }
                }
            }
        }

        IBlockState state = BlockInit.PORTAL.getDefaultState().withProperty(BlockEnderthPortal.AXIS, l6 == 0 ? Axis.Z : Axis.X);

        for (int i8 = 0; i8 < 4; ++i8) {
            for (int l8 = 0; l8 < 4; ++l8) {
                for (int l9 = -1; l9 < 4; ++l9) {
                    int l10 = i6 + (l8 - 1) * l6;
                    int l11 = k2 + l9;
                    int k12 = k6 + (l8 - 1) * i3;
                    boolean flag1 = l8 == 0 || l8 == 3 || l9 == -1 || l9 == 3;
                    this.world.setBlockState(new BlockPos(l10, l11, k12), flag1 ? BlockInit.RHODOCHROSITE_BLOCK.getDefaultState() : state, 2);
                }
            }

            for (int i9 = 0; i9 < 4; ++i9) {
                for (int i10 = -1; i10 < 4; ++i10) {
                    int i11 = i6 + (i9 - 1) * l6;
                    int i12 = k2 + i10;
                    int l12 = k6 + (i9 - 1) * i3;
                    BlockPos blockpos = new BlockPos(i11, i12, l12);
                    this.world.notifyNeighborsOfStateChange(blockpos, this.world.getBlockState(blockpos).getBlock(), false);
                }
            }
        }
        return true;
    }
    
    @Override
    public void removeStalePortalLocations(long worldTime) {
        if(worldTime % 100L == 0L) {
            long i = worldTime - 300L;
            ObjectIterator<Teleporter.PortalPosition> iterator = this.destinationCoordinateCache.values().iterator();
            
            while(iterator.hasNext()) {
                Teleporter.PortalPosition position = (Teleporter.PortalPosition)iterator.next();
                
                if(position == null || position.lastUpdateTime < i) iterator.remove();
            }
        }
    }
    
    @Override
    public void placeEntity(World world, Entity entity, float yaw)
    {
        if (entity instanceof EntityPlayerMP)
            placeInPortal(entity, yaw);
        else
            placeInExistingPortal(entity, yaw);
    }
}


Thanks! :D

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Currently, I'm trying to figure out how to read in data from a custom datapack.  The intention is to have the Item have a reference to this pack (IE "modname:material/materialname") as an NBT tag, and i would overwrite some use functions based off of that.  How should I go about reading in the data from the datapack?
    • Game version is 1.16.5, no mods were installed, using Java8 while it happened. And I have multiple different versions of Java including Java8, 11, 12, 13, 14, 15, 16, 18 were installed in my system, but there is only Java8's path inside the environment variable. Could them be one of the reasons? I'm new here so I almost don't know anythings about forge server. Please tell me if you need other files or logs. Following is the output inside CMD after I open the "start.bat": ECHO 处于打开状态。 C:\Users\30121\Desktop\N0u3_OL_server>"C:\Program Files\Java\jre1.8.0_321\bin\java.exe" -Xms2G -Xmx2G -jar forge-1.16.5-36.2.35.jar nogui 2022-05-25 12:42:52,637 main ERROR Error processing element Queue ([Appenders: null]): CLASS_NOT_FOUND 2022-05-25 12:42:52,670 main WARN Advanced terminal features are not available in this environment 2022-05-25 12:42:52,709 main ERROR Unable to locate appender "ServerGuiConsole" for logger config "root" [12:42:52] [main/INFO] [cp.mo.mo.Launcher/MODLAUNCHER]: ModLauncher running: args [--gameDir, ., --launchTarget, fmlserver, --fml.forgeVersion, 36.2.35, --fml.mcpVersion, 20210115.111550, --fml.mcVersion, 1.16.5, --fml.forgeGroup, net.minecraftforge, nogui] [12:42:52] [main/INFO] [cp.mo.mo.Launcher/MODLAUNCHER]: ModLauncher 8.1.3+8.1.3+main-8.1.x.c94d18ec starting: java version 1.8.0_321 by Oracle Corporation [12:42:53] [main/INFO] [ne.mi.fm.lo.FixSSL/CORE]: Added Lets Encrypt root certificates as additional trust Exception in thread "main" [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: java.lang.NoClassDefFoundError: com/google/common/base/Preconditions [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at org.spongepowered.asm.service.modlauncher.MixinTransformationHandler.offer(MixinTransformationHandler.java:67) [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at org.spongepowered.asm.service.modlauncher.MixinServiceModLauncher.offer(MixinServiceModLauncher.java:162) [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at org.spongepowered.asm.launch.MixinBootstrap.offerInternals(MixinBootstrap.java:227) [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at org.spongepowered.asm.launch.MixinBootstrap.start(MixinBootstrap.java:148) [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at org.spongepowered.asm.launch.MixinTransformationServiceAbstract.initialize(MixinTransformationServiceAbstract.java:88) [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at cpw.mods.modlauncher.TransformationServiceDecorator.onInitialize(TransformationServiceDecorator.java:68) [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at cpw.mods.modlauncher.TransformationServicesHandler.lambda$initialiseTransformationServices$7(TransformationServicesHandler.java:107) [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at java.util.HashMap$Values.forEach(Unknown Source) [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at cpw.mods.modlauncher.TransformationServicesHandler.initialiseTransformationServices(TransformationServicesHandler.java:107) [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at cpw.mods.modlauncher.TransformationServicesHandler.initializeTransformationServices(TransformationServicesHandler.java:59) [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at cpw.mods.modlauncher.Launcher.run(Launcher.java:76) [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at cpw.mods.modlauncher.Launcher.main(Launcher.java:66) [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at net.minecraftforge.server.ServerMain$Runner.runLauncher(ServerMain.java:49) [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at net.minecraftforge.server.ServerMain$Runner.access$100(ServerMain.java:46) [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at net.minecraftforge.server.ServerMain.main(ServerMain.java:43) [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: Caused by: java.lang.ClassNotFoundException: com.google.common.base.Preconditions [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at java.net.URLClassLoader.findClass(Unknown Source) [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at java.lang.ClassLoader.loadClass(Unknown Source) [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at java.lang.ClassLoader.loadClass(Unknown Source) [12:42:53] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         ... 15 more C:\Users\30121\Desktop\N0u3_OL_server>pause 请按任意键继续. . .
    • Although I am not exactly sure how a try-finally block would help (i.e. what code I should run even if a runtime exception is thrown), I have made some progress. The custom mob renders, but it does not rotate--even when I apply rotations to it before calling render(). private static boolean renderingCustomEntity = false; private static CustomEntity customEntity; private static void initializeCustomEntityIfNull(LocalPlayer localPlayer) { if (customEntity == null) { customEntity = ModEntities.CUSTOM_ENTITY.get().create(localPlayer.clientLevel); } } @SubscribeEvent public static void replaceMobModel(RenderLivingEvent.Pre<LivingEntity, EntityModel<LivingEntity>> event) { LocalPlayer localPlayer = Minecraft.getInstance().player; if (localPlayer != null && event.getEntity() instanceof Mob mob) { try { if (!renderingCustomEntity) { renderingCustomEntity = true; event.setCanceled(true); initializeCustomEntityIfNull(localPlayer); // I try to apply rotations to the custom entity before it rendered, but it still does not rotate at all. customEntity.setYRot(mob.getYRot()); customEntity.setYHeadRot(mob.getYHeadRot()); customEntity.setPose(mob.getPose()); // For some reason, the custom mob did not render when I called EntityRenderDispatcher#render. // So I called render() from EntityRenderDispatcher#getRenderer instead. Minecraft.getInstance().getEntityRenderDispatcher().getRenderer(customEntity).render( customEntity, customEntity.getYRot(), event.getPartialTick(), event.getPoseStack(), event.getMultiBufferSource(), event.getPackedLight() ); } } finally { renderingCustomEntity = false; } } } What would I be missing? Thank you for the help.
    • https://ileanafilio.com/cong-ty-co-phan-dau-tu-lien-doanh-viet-anh/ https://ileanafilio.com/tu-dong-viet-hoa-dau-dong-trong-excel-2007/ https://ileanafilio.com/tai-bai-hat-yeu-lai-tu-dau/ https://ileanafilio.com/phan-ky-dau-tu-du-an/ https://ileanafilio.com/su-lua-chon-so-phan-tap-62/ https://ileanafilio.com/cong-ty-co-phan-thuong-mai-dau-tu-va-phat-trien-cong-nghe-sctt/ https://ileanafilio.com/karate-co-nguon-goc-tu-dau/ https://ileanafilio.com/tap-doan-co-khi-xay-dung-thuong-mai-dai-dung/ https://ileanafilio.com/cach-tinh-dau-tu-tai-san-co-dinh/
    • Yes, I used it. And when I deleted the unnecessary parts and ran it again, I got an error. Now when I repaired that error and ran it, it worked fine. Thanks!
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.