summaryrefslogtreecommitdiffstats
path: root/src/main/java/net/minecraft/server/BlockFurnace.java
blob: 9d9fde7c47bdbadeb344d7ee3a3b772173d87f1d (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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package net.minecraft.server;

import java.util.Random;

public class BlockFurnace extends BlockContainer {

    private Random a = new Random();
    private final boolean b;
    private static boolean c = false;

    protected BlockFurnace(int i, boolean flag) {
        super(i, Material.STONE);
        this.b = flag;
        this.textureId = 45;
    }

    public int getDropType(int i, Random random, int j) {
        return Block.FURNACE.id;
    }

    public void onPlace(World world, int i, int j, int k) {
        super.onPlace(world, i, j, k);
        this.g(world, i, j, k);
    }

    private void g(World world, int i, int j, int k) {
        if (!world.isStatic) {
            int l = world.getTypeId(i, j, k - 1);
            int i1 = world.getTypeId(i, j, k + 1);
            int j1 = world.getTypeId(i - 1, j, k);
            int k1 = world.getTypeId(i + 1, j, k);
            byte b0 = 3;

            if (Block.n[l] && !Block.n[i1]) {
                b0 = 3;
            }

            if (Block.n[i1] && !Block.n[l]) {
                b0 = 2;
            }

            if (Block.n[j1] && !Block.n[k1]) {
                b0 = 5;
            }

            if (Block.n[k1] && !Block.n[j1]) {  
                b0 = 4;
            }

            world.setData(i, j, k, b0);
        }
    }

    public int a(int i) {
        return i == 1 ? this.textureId + 17 : (i == 0 ? this.textureId + 17 : (i == 3 ? this.textureId - 1 : this.textureId));
    }

    public boolean interact(World world, int i, int j, int k, EntityHuman entityhuman) {
        if (world.isStatic) {
            return true;
        } else {
            TileEntityFurnace tileentityfurnace = (TileEntityFurnace) world.getTileEntity(i, j, k);

            if (tileentityfurnace != null) {
                entityhuman.openFurnace(tileentityfurnace);
            }

            return true;
        }
    }

    public static void a(boolean flag, World world, int i, int j, int k) {
        int l = world.getData(i, j, k);
        TileEntity tileentity = world.getTileEntity(i, j, k);

        c = true;
        if (flag) {
            world.setTypeId(i, j, k, Block.BURNING_FURNACE.id);
        } else {
            world.setTypeId(i, j, k, Block.FURNACE.id);
        }

        c = false;
        world.setData(i, j, k, l);
        if (tileentity != null) {
            tileentity.m();
            world.setTileEntity(i, j, k, tileentity);
        }
    }

    public TileEntity a_() {
        return new TileEntityFurnace();
    }

    public void postPlace(World world, int i, int j, int k, EntityLiving entityliving) {
        int l = MathHelper.floor((double) (entityliving.yaw * 4.0F / 360.0F) + 0.5D) & 3;

        if (l == 0) {
            world.setData(i, j, k, 2);
        }

        if (l == 1) {
            world.setData(i, j, k, 5);
        }

        if (l == 2) {
            world.setData(i, j, k, 3);
        }

        if (l == 3) {
            world.setData(i, j, k, 4);
        }
    }

    public void remove(World world, int i, int j, int k) {
        if (!c) {
            TileEntityFurnace tileentityfurnace = (TileEntityFurnace) world.getTileEntity(i, j, k);

            if (tileentityfurnace != null) {
                for (int l = 0; l < tileentityfurnace.getSize(); ++l) {
                    ItemStack itemstack = tileentityfurnace.getItem(l);

                    if (itemstack != null) {
                        float f = this.a.nextFloat() * 0.8F + 0.1F;
                        float f1 = this.a.nextFloat() * 0.8F + 0.1F;
                        float f2 = this.a.nextFloat() * 0.8F + 0.1F;

                        while (itemstack.count > 0) {
                            int i1 = this.a.nextInt(21) + 10;

                            if (i1 > itemstack.count) {
                                i1 = itemstack.count;
                            }

                            itemstack.count -= i1;
                            // CraftBukkit - include enchantments in new itemstack
                            EntityItem entityitem = new EntityItem(world, (double) ((float) i + f), (double) ((float) j + f1), (double) ((float) k + f2), new ItemStack(itemstack.id, i1, itemstack.getData(), itemstack.getEnchantments()));
                            float f3 = 0.05F;

                            entityitem.motX = (double) ((float) this.a.nextGaussian() * f3);
                            entityitem.motY = (double) ((float) this.a.nextGaussian() * f3 + 0.2F);
                            entityitem.motZ = (double) ((float) this.a.nextGaussian() * f3);
                            world.addEntity(entityitem);
                        }
                    }
                }
            }
        }

        super.remove(world, i, j, k);
    }
}