summaryrefslogtreecommitdiff
path: root/src/main/java/jp/plusplus/fbs/packet/MessageGuiButtonDecide.java
blob: cf203de974a2e96e75fd4cd7a1490927a6baeafc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package jp.plusplus.fbs.packet;

import cpw.mods.fml.common.network.ByteBufUtils;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import io.netty.buffer.ByteBuf;
import jp.plusplus.fbs.FBS;
import jp.plusplus.fbs.block.BlockCore;
import jp.plusplus.fbs.container.ContainerWarp;
import jp.plusplus.fbs.exprop.FBSEntityProperties;
import jp.plusplus.fbs.item.ItemBookSorcery;
import jp.plusplus.fbs.tileentity.TileEntityPortalWarp;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;

import java.util.Random;

/**
 * Created by plusplus_F on 2015/10/22.
 */
public class MessageGuiButtonDecide implements IMessage {
    public FBSEntityProperties.WarpPosition destination;
    public EntityPlayer player;

    public MessageGuiButtonDecide(){}
    public MessageGuiButtonDecide(EntityPlayer ep, FBSEntityProperties.WarpPosition dest){
        player=ep;
        destination=dest;
    }

    @Override
    public void fromBytes(ByteBuf buf) {

        destination=new FBSEntityProperties.WarpPosition(ByteBufUtils.readTag(buf));
    }

    @Override
    public void toBytes(ByteBuf buf) {
        NBTTagCompound nbt=new NBTTagCompound();
        destination.writeToNBT(nbt);
        ByteBufUtils.writeTag(buf, nbt);
    }

    public static class Handler implements IMessageHandler<MessageGuiButtonDecide, IMessage> {
        protected Random rand=new Random();
        @Override
        public IMessage onMessage(MessageGuiButtonDecide message, MessageContext ctx) {
            EntityPlayer ep=ctx.getServerHandler().playerEntity;
            World w=ctx.getServerHandler().playerEntity.worldObj;

            if(ep.openContainer instanceof ContainerWarp){
                ContainerWarp con=(ContainerWarp)ep.openContainer;

                //ポータルの生成
                if(!w.isRemote){
                    FBSEntityProperties.WarpPosition wp=message.destination;

                    int x=MathHelper.floor_double(ep.posX);
                    int y=MathHelper.floor_double(ep.posY);
                    int z=MathHelper.floor_double(ep.posZ);
                    int rx=(rand.nextBoolean()?1:-1)*(1+rand.nextInt(2));
                    int ry=0;
                    int rz=(rand.nextBoolean()?1:-1)*(1+rand.nextInt(2));
                    int meta=0;

                    if(MathHelper.abs_int(rx)>MathHelper.abs_int(rz)){
                        meta=(meta|8);
                    }
                    if(wp.dimId==FBS.dimensionCrackId && wp.x==-1 && wp.y==-1 && wp.z==-1){
                        //狭間生成用
                        meta=(meta|4);
                    }

                    rx+=x;
                    ry+=y;
                    rz+=z;
                    for(int i=0;i<2;i++){
                        w.setBlock(rx, ry+i, rz, BlockCore.portal1, meta+i, 2);
                        TileEntity te=w.getTileEntity(rx,ry+i,rz);
                        if(te instanceof TileEntityPortalWarp){
                            ((TileEntityPortalWarp) te).destination=message.destination;
                            te.markDirty();
                        }
                    }
                }

                //魔導書の使用回数を減らす
                if(!ep.capabilities.isCreativeMode){
                    ItemStack item=ep.getCurrentEquippedItem();
                    if(item != null && item.getItem() instanceof ItemBookSorcery){
                        ItemBookSorcery.reduceMagicMaxUse(item);
                    }
                }

                //GUI閉じる
                con.close=true;
            }

            //

            return null;
        }
    }
}