package kr.syeyoung.dungeonsguide.dungeon.actions; import com.google.common.base.Predicate; import com.google.common.base.Predicates; import kr.syeyoung.dungeonsguide.dungeon.data.OffsetPoint; import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom; import kr.syeyoung.dungeonsguide.utils.RenderUtils; import lombok.Data; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.BlockRendererDispatcher; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.WorldRenderer; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.client.renderer.vertex.VertexBuffer; import net.minecraft.entity.Entity; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.util.BlockPos; import net.minecraft.util.MathHelper; import java.awt.*; import java.util.HashSet; import java.util.Set; @Data public class ActionBreakWithSuperBoom extends AbstractAction { private Set preRequisite = new HashSet(); private OffsetPoint target; public ActionBreakWithSuperBoom(OffsetPoint target) { this.target = target; } @Override public Set getPreRequisites(DungeonRoom dungeonRoom) { return preRequisite; } @Override public boolean isComplete(DungeonRoom dungeonRoom) { return target.getBlock(dungeonRoom) == Blocks.air; } @Override public void onRenderWorld(DungeonRoom dungeonRoom, float partialTicks) { Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture); BlockPos blockpos = target.getBlockPos(dungeonRoom); Entity viewing_from = Minecraft.getMinecraft().getRenderViewEntity(); double x_fix = viewing_from.lastTickPosX + ((viewing_from.posX - viewing_from.lastTickPosX) * partialTicks); double y_fix = viewing_from.lastTickPosY + ((viewing_from.posY - viewing_from.lastTickPosY) * partialTicks); double z_fix = viewing_from.lastTickPosZ + ((viewing_from.posZ - viewing_from.lastTickPosZ) * partialTicks); GlStateManager.pushMatrix(); GlStateManager.translate(-x_fix, -y_fix, -z_fix); GlStateManager.disableLighting(); GlStateManager.enableAlpha(); GlStateManager.disableDepth(); GlStateManager.depthMask(false); GlStateManager.enableBlend(); Tessellator tessellator = Tessellator.getInstance(); WorldRenderer vertexbuffer = tessellator.getWorldRenderer(); vertexbuffer.begin(7, DefaultVertexFormats.BLOCK); BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); blockrendererdispatcher.getBlockModelRenderer().renderModel(Minecraft.getMinecraft().theWorld, blockrendererdispatcher.getBlockModelShapes().getModelForState(Blocks.tnt.getDefaultState()), Blocks.tnt.getDefaultState(), blockpos, vertexbuffer, false); tessellator.draw(); GlStateManager.enableLighting(); GlStateManager.popMatrix(); RenderUtils.highlightBlock(blockpos, new Color(0, 255,255,50), partialTicks, true); RenderUtils.drawTextAtWorld("Superboom", blockpos.getX() + 0.5f, blockpos.getY() + 0.5f, blockpos.getZ() + 0.5f, 0xFFFFFF00, 0.03f, false, false, partialTicks); } @Override public String toString() { return "BreakWithSuperboom\n- target: "+target.toString(); } }