2014-04-08 2 views
0

을 두 배로 해결 :식의 유형은 배열 형식이어야하지만 나는이 코드를 사용하는 경우

The type of the expression must be an array type but it resolved to double

내가 마인 크래프트를 코딩하고 있습니다 :

switch (1.$SwitchMap$org$bukkit$Material[block.getType().ordinal()]) 

을 나는 오류가 Bukkit 플러그인

내 전체 코드는 다음과 같습니다.

package me.TheTrain2000.Smelter; 

import java.util.Iterator; 
import java.util.List; 
import org.bukkit.Material; 
import org.bukkit.Server; 
import org.bukkit.World; 
import org.bukkit.block.Block; 
import org.bukkit.block.BlockFace; 
import org.bukkit.event.EventHandler; 
import org.bukkit.event.EventPriority; 
import org.bukkit.event.Listener; 
import org.bukkit.event.block.BlockBreakEvent; 
import org.bukkit.event.block.BlockPhysicsEvent; 
import org.bukkit.event.entity.EntityExplodeEvent; 
import org.bukkit.inventory.ItemStack; 
import org.bukkit.plugin.PluginManager; 
import org.bukkit.plugin.java.JavaPlugin; 

public class Main 
    extends JavaPlugin 
    implements Listener 
{ 
    private static byte MAGIC_BYTE = 15; 

    public void onEnable() 
    { 
    getServer().getPluginManager().registerEvents(this, this); 
    } 

    @EventHandler(priority=EventPriority.LOW, ignoreCancelled=true) 
    public void onEntityExplode(EntityExplodeEvent event) 
    { 
    if (event.blockList().isEmpty()) { 
     return; 
    } 
    for (Iterator<Block> i = event.blockList().iterator(); i.hasNext();) 
    { 
     Block block = (Block)i.next(); 
     if ((block.getData() == MAGIC_BYTE) && (shouldBreak(block))) 
     { 
     simulateBreak(block); 
     i.remove(); 
     } 
    } 
    } 

    @EventHandler(priority=EventPriority.LOWEST, ignoreCancelled=true) 
    public void onBlockBreak(BlockBreakEvent event) 
    { 
    Block block = event.getBlock(); 
    if ((block.getData() == MAGIC_BYTE) && (shouldBreak(block))) 
    { 
     simulateBreak(block); 
     event.setCancelled(true); 
    } 
    } 

    @EventHandler(ignoreCancelled=true) 
    public void onBlockPhysics(BlockPhysicsEvent event) 
    { 
    Block block = event.getBlock(); 
    Block block1 = block.getRelative(BlockFace.DOWN); 
    Block block2 = block1.getRelative(BlockFace.DOWN); 

    boolean aboveLava = (block1.getType() == Material.LAVA) || (block1.getType() == Material.STATIONARY_LAVA); 
    boolean aboveCoveredLava = (block1.getType() == Material.GLASS) && ((block2.getType() == Material.LAVA) || (block2.getType() == Material.STATIONARY_LAVA)); 
    if (((aboveLava) || (aboveCoveredLava)) && (nextToPiston(block))) { 
     smeltBlock(block); 
    } 
    if ((block.getData() == MAGIC_BYTE) && (block1.getType() == Material.WATER)) { 
     simulateBreak(block); 
    } 
    } 

    private void smeltBlock(Block block) 
    { 
    int newType = getNewType(block).getId(); 
    if (newType != 0) { 
     block.setTypeIdAndData(newType, MAGIC_BYTE, true); 
    } 
    } 

    private boolean shouldBreak(Block block) 
    { 
    switch (1.$SwitchMap$org$bukkit$Material[block.getType().ordinal()]) 
    { 
    case 1: 
    case 2: 
    case 3: 
    case 4: 
     return true; 
    } 
    return false; 
    } 

    private Material getNewType(Block block) 
    { 
    switch (1.$SwitchMap$org$bukkit$Material[block.getType().ordinal()]) 
    { 
    case 5: 
     return Material.STONE; 
    case 6: 
     return Material.IRON_BLOCK; 
    case 7: 
     return Material.GOLD_BLOCK; 
    case 8: 
     return Material.GLASS; 
    case 9: 
     return Material.BRICK; 
    } 
    return Material.AIR; 
    } 

    private void simulateBreak(Block block) 
    { 
    Material dropItem = getDrop(block); 
    if (dropItem == null) { 
     return; 
    } 
    block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(dropItem, 1)); 
    block.setType(Material.AIR); 
    } 

    private boolean nextToPiston(Block block) 
    { 
    return (block.getRelative(BlockFace.EAST).getType() == Material.PISTON_EXTENSION) || (block.getRelative(BlockFace.WEST).getType() == Material.PISTON_EXTENSION) || (block.getRelative(BlockFace.NORTH).getType() == Material.PISTON_EXTENSION) || (block.getRelative(BlockFace.SOUTH).getType() == Material.PISTON_EXTENSION) || (block.getRelative(BlockFace.UP).getType() == Material.PISTON_EXTENSION); 
    } 

    private Material getDrop(Block block) 
    { 
    switch (1.$SwitchMap$org$bukkit$Material[block.getType().ordinal()]) 
    { 
    case 2: 
     return Material.STONE; 
    case 3: 
     return Material.IRON_INGOT; 
    case 4: 
     return Material.GOLD_INGOT; 
    case 1: 
     return Material.GLASS; 
    case 10: 
     return Material.BRICK; 
    } 
    return null; 
    } 
} 
,
+0

전체 코드는 무엇입니까? – Jojodmo

+0

지금 게시하십시오. – user3509020

+0

switch 문을 사용하여 무엇을 할 계획입니까? – mezzodrinker

답변

0

이 :

switch (1.$SwitchMap$org$bukkit$Material[block.getType().ordinal()]) 

명확하게 코드와 유효하지 않은 자바 소스 코드를 디 컴파일됩니다. 당신은 아마이었다 원래 통화로 교체해야합니다

switch(block.getType()) 

을 그리고 당신은 그들이 대표 열거 그들의 순서 값에서 모든 경우 문을 번역해야합니다.