下面列出了怎么用net.minecraft.util.MovingObjectPosition的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* @author CCBlueX
*/
@Overwrite
private void sendClickBlockToController(boolean leftClick) {
if(!leftClick)
this.leftClickCounter = 0;
if (this.leftClickCounter <= 0 && (!this.thePlayer.isUsingItem() || LiquidBounce.moduleManager.getModule(MultiActions.class).getState())) {
if(leftClick && this.objectMouseOver != null && this.objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {
BlockPos blockPos = this.objectMouseOver.getBlockPos();
if(this.leftClickCounter == 0)
LiquidBounce.eventManager.callEvent(new ClickBlockEvent(blockPos, this.objectMouseOver.sideHit));
if(this.theWorld.getBlockState(blockPos).getBlock().getMaterial() != Material.air && this.playerController.onPlayerDamageBlock(blockPos, this.objectMouseOver.sideHit)) {
this.effectRenderer.addBlockHitEffects(blockPos, this.objectMouseOver.sideHit);
this.thePlayer.swingItem();
}
} else if (!LiquidBounce.moduleManager.getModule(AbortBreaking.class).getState()) {
this.playerController.resetBlockRemoving();
}
}
}
/**
* @author CCBlueX
*/
@Overwrite
private void sendClickBlockToController(boolean leftClick) {
if(!leftClick)
this.leftClickCounter = 0;
if (this.leftClickCounter <= 0 && (!this.thePlayer.isUsingItem() || LiquidBounce.moduleManager.getModule(MultiActions.class).getState())) {
if(leftClick && this.objectMouseOver != null && this.objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {
BlockPos blockPos = this.objectMouseOver.getBlockPos();
if(this.leftClickCounter == 0)
LiquidBounce.eventManager.callEvent(new ClickBlockEvent(blockPos, this.objectMouseOver.sideHit));
if(this.theWorld.getBlockState(blockPos).getBlock().getMaterial() != Material.air && this.playerController.onPlayerDamageBlock(blockPos, this.objectMouseOver.sideHit)) {
this.effectRenderer.addBlockHitEffects(blockPos, this.objectMouseOver.sideHit);
this.thePlayer.swingItem();
}
} else if (!LiquidBounce.moduleManager.getModule(AbortBreaking.class).getState()) {
this.playerController.resetBlockRemoving();
}
}
}
@InvokeEvent
public void attacc(PlayerAttackEntityEvent entityEvent) {
if (!Settings.SHOW_HIT_DISTANCES) return;
if (!(entityEvent.getEntity() instanceof EntityLivingBase)) return;
if (((EntityLivingBase) entityEvent.getEntity()).hurtTime > 0) return;
if (locked) return;
locked = true;
EntityPlayerSP entity = Minecraft.getMinecraft().thePlayer;
double d0 = 6;
Vec3 vec3 = entity.getPositionEyes(0.0F);
Vec3 vec31 = entity.getLook(0.0F);
Vec3 vec32 = vec3.addVector(vec31.xCoord * d0, vec31.yCoord * d0, vec31.zCoord * d0);
Entity entity1 = entityEvent.getEntity();
float f1 = .1F;
AxisAlignedBB axisalignedbb = entity1.getEntityBoundingBox().expand(f1, f1, f1);
MovingObjectPosition movingobjectposition = axisalignedbb.calculateIntercept(vec3, vec32);
if (movingobjectposition == null) return;
Vec3 vec33 = movingobjectposition.hitVec;
hits.add(new Hit(vec33, dis));
}
@Override
public void onMouse(MouseEvent event) {
MovingObjectPosition mop = Wrapper.INSTANCE.mc().objectMouseOver;
if (mop.sideHit == -1) {
return;
}
if (Mouse.isButtonDown(1)) {
TileEntity entity = Wrapper.INSTANCE.world().getTileEntity(mop.blockX, mop.blockY, mop.blockZ);
try {
if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && entity != null && Class.forName("eu.thesociety.DragonbornSR.DragonsRadioMod.Block.TileEntity.TileEntityRadio").isInstance(entity)) {
Wrapper.INSTANCE.mc().displayGuiScreen((GuiScreen) Class.forName("eu.thesociety.DragonbornSR.DragonsRadioMod.Block.Gui.NGuiRadio").getConstructor(Class.forName("eu.thesociety.DragonbornSR.DragonsRadioMod.Block.TileEntity.TileEntityRadio")).newInstance(entity));
InteropUtils.log("Gui opened", this);
if (event.isCancelable()) {
event.setCanceled(true);
}
}
} catch (Exception ex) {
InteropUtils.log("&cError", this);
}
}
}
@Override
public void onMouse(MouseEvent event) {
try {
MovingObjectPosition position = Wrapper.INSTANCE.mc().objectMouseOver;
boolean nowState = Mouse.isButtonDown(0);
if (position.sideHit != -1 && nowState && !prevState) {
ByteBuf buf = Unpooled.buffer(0);
buf.writeByte(14);
buf.writeInt(position.blockX);
buf.writeInt(position.blockY);
buf.writeInt(position.blockZ);
C17PacketCustomPayload packet = new C17PacketCustomPayload("cfm", buf);
Wrapper.INSTANCE.player().sendQueue.addToSendQueue(packet);
}
prevState = nowState;
} catch (Exception ignored) {
}
}
@Override
public void onModuleEnabled() {
try {
Class.forName("powercrystals.minefactoryreloaded.net.ServerPacketHandler");
MovingObjectPosition mop = Wrapper.INSTANCE.mc().objectMouseOver;
TileEntity entity = Wrapper.INSTANCE.world().getTileEntity(mop.blockX, mop.blockY, mop.blockZ);
if (entity == null) {
this.off();
return;
}
if (entity instanceof IInventory) {
IInventory inv = (IInventory) entity;
for (int i = 0; i < inv.getSizeInventory(); i++) {
setSlot(i, mop.blockX, mop.blockY, mop.blockZ);
}
}
InteropUtils.log("Cleared", this);
this.off();
} catch (Exception ex) {
this.off();
}
}
@Override
public void onTicks() {
try {
boolean newState = Keyboard.isKeyDown(GiveKeybind.getKey());
if (newState && !prevState) {
prevState = newState;
MovingObjectPosition mop = Wrapper.INSTANCE.mc().objectMouseOver;
TileEntity entity = Wrapper.INSTANCE.world().getTileEntity(mop.blockX, mop.blockY, mop.blockZ);
if (entity != null && Class.forName("cofh.thermalexpansion.block.cache.TileCache").isInstance(entity)) {
setSlot(entity, Statics.STATIC_ITEMSTACK);
InteropUtils.log("Set", this);
}
}
prevState = newState;
} catch (Exception e) {
}
}
@Override
public void onTicks() {
Entity entity;
this.targetlist.clear();
Wrapper.INSTANCE.world().playerEntities.stream().filter((e) -> !(!this.isAttackable((Entity) e) || (AuraConfiguration.config.friends.contains(((Entity) e).getCommandSenderName())))).forEachOrdered((e) -> {
this.targetlist.add((EntityPlayer) e);
});
if (Wrapper.INSTANCE.mc().objectMouseOver == null) {
return;
}
if (Wrapper.INSTANCE.mc().objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY && (entity = Wrapper.INSTANCE.mc().objectMouseOver.entityHit) instanceof EntityPlayer) {
this.curtarget = (EntityPlayer) entity;
return;
}
if (!this.targetlist.contains(this.curtarget) && this.curtarget != null) {
this.curtarget = null;
return;
}
Random r = new Random();
if (this.curtarget == null) {
return;
}
Wrapper.INSTANCE.player().rotationYaw = (float) (Wrapper.INSTANCE.player().rotationYaw - (Wrapper.INSTANCE.player().rotationYaw - this.getAngles(this.curtarget)[0]) * 0.5);
Wrapper.INSTANCE.player().rotationPitch = (float) (Wrapper.INSTANCE.player().rotationPitch - (Wrapper.INSTANCE.player().rotationPitch - this.getAngles(this.curtarget)[1]) * 0.5);
}
@Override
public void onMouse(MouseEvent event) {
try {
boolean nowState = Mouse.isButtonDown(1);
MovingObjectPosition position = Wrapper.INSTANCE.mc().objectMouseOver;
if (position.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && !prevState && nowState) {
TileEntity tileEntity = Wrapper.INSTANCE.world().getTileEntity(position.blockX, position.blockY, position.blockZ);
if (tileEntity instanceof IInventory) {
ItemStack[] stacks = new ItemStack[0];
Wrapper.INSTANCE.mc().displayGuiScreen(new ShowContainerGui(new ShowContainerContainer(stacks, tileEntity.getClass().getSimpleName())));
if (event.isCancelable()) {
event.setCanceled(true);
}
} else {
InteropUtils.log("Not a container", this);
}
}
prevState = nowState;
} catch (Exception ignored) {
}
}
@SubscribeEvent
public void onAttack(AttackEntityEvent event) {
if (!cheatEnabled) {
return;
}
if (!(KillAura.isActive || MobAura.isActive || ProphuntAura.isActive || Forcefield.isActive || TriggerBot.isActive || !Criticals.isActive || Wrapper.INSTANCE.player().isInWater() || Wrapper.INSTANCE.player().isInsideOfMaterial(Material.lava) || Wrapper.INSTANCE.player().isInsideOfMaterial(Material.web) || !Wrapper.INSTANCE.player().onGround || !Wrapper.INSTANCE.mcSettings().keyBindAttack.getIsKeyPressed() || Wrapper.INSTANCE.mc().objectMouseOver == null || Wrapper.INSTANCE.mc().objectMouseOver.typeOfHit != MovingObjectPosition.MovingObjectType.ENTITY)) {
event.setCanceled(true);
Wrapper.INSTANCE.player().motionY = 0.1000000014901161;
Wrapper.INSTANCE.player().fallDistance = 0.1f;
Wrapper.INSTANCE.player().onGround = false;
event.setCanceled(false);
}
if (event.target instanceof EntityPlayer) {
EntityPlayer e = (EntityPlayer) event.target;
if (SeeHealth.isActive) {
InteropUtils.log("Health of &e" + e.getCommandSenderName() + "&f: &e" + e.getHealth(), "SeeHealth");
}
}
}
private void playVortexEffects() {
for (int a = 0; a < Thaumcraft.proxy.particleCount(1); a++) {
int tx = this.xCoord + this.worldObj.rand.nextInt(4) - this.worldObj.rand.nextInt(4);
int ty = this.yCoord + 1 + this.worldObj.rand.nextInt(4) - this.worldObj.rand.nextInt(4);
int tz = this.zCoord + this.worldObj.rand.nextInt(4) - this.worldObj.rand.nextInt(4);
if (ty > this.worldObj.getHeightValue(tx, tz)) {
ty = this.worldObj.getHeightValue(tx, tz);
}
Vec3 v1 = Vec3.createVectorHelper(this.xCoord + 0.5D, this.yCoord + 1.5D, this.zCoord + 0.5D);
Vec3 v2 = Vec3.createVectorHelper(tx + 0.5D, ty + 0.5D, tz + 0.5D);
MovingObjectPosition mop = ThaumcraftApiHelper.rayTraceIgnoringSource(this.worldObj, v1, v2, true, false, false);
if ((mop != null) && (getDistanceFrom(mop.blockX, mop.blockY, mop.blockZ) < 16.0D)) {
tx = mop.blockX;
ty = mop.blockY;
tz = mop.blockZ;
Block bi = this.worldObj.getBlock(tx, ty, tz);
int md = this.worldObj.getBlockMetadata(tx, ty, tz);
if (!bi.isAir(this.worldObj, tx, ty, tz)) {
Thaumcraft.proxy.hungryNodeFX(this.worldObj, tx, ty, tz, this.xCoord, this.yCoord + 1, this.zCoord, bi, md);
}
}
}
}
@Override
public boolean activate(EntityPlayer player, MovingObjectPosition hit, ItemStack held) {
if (hit.sideHit == (side() ^ 1) && player.isSneaking()) {
int r = rotation();
setRotation((r + 1) % 4);
if (!tile().canReplacePart(this, this)) {
setRotation(r);
return false;
}
if (!world().isRemote) {
updateChange();
onPartChanged(this);
} else {
setRotation(r);
}
return true;
}
return false;
}
public static MovingObjectPosition getMovingObjectPositionFromPlayer(World par1World, EntityPlayer par2EntityPlayer, boolean par3) {
float var4 = 1.0F;
float var5 = par2EntityPlayer.prevRotationPitch + (par2EntityPlayer.rotationPitch - par2EntityPlayer.prevRotationPitch) * var4;
float var6 = par2EntityPlayer.prevRotationYaw + (par2EntityPlayer.rotationYaw - par2EntityPlayer.prevRotationYaw) * var4;
double var7 = par2EntityPlayer.prevPosX + (par2EntityPlayer.posX - par2EntityPlayer.prevPosX) * var4;
double var9 = par2EntityPlayer.prevPosY + (par2EntityPlayer.posY - par2EntityPlayer.prevPosY) * var4 + 1.62D - par2EntityPlayer.yOffset;
double var11 = par2EntityPlayer.prevPosZ + (par2EntityPlayer.posZ - par2EntityPlayer.prevPosZ) * var4;
// TODO- 1.7.10 fix?
Vec3 var13 = Vec3.createVectorHelper(var7, var9, var11);
float var14 = MathHelper.cos(-var6 * 0.017453292F - (float) Math.PI);
float var15 = MathHelper.sin(-var6 * 0.017453292F - (float) Math.PI);
float var16 = -MathHelper.cos(-var5 * 0.017453292F);
float var17 = MathHelper.sin(-var5 * 0.017453292F);
float var18 = var15 * var16;
float var20 = var14 * var16;
double var21 = 5.0D;
if (par2EntityPlayer instanceof EntityPlayerMP) {
var21 = ((EntityPlayerMP) par2EntityPlayer).theItemInWorldManager.getBlockReachDistance();
}
Vec3 var23 = var13.addVector(var18 * var21, var17 * var21, var20 * var21);
return par1World.rayTraceBlocks(var13, var23, par3);
}
public static MovingObjectPosition getMovingObjectPositionFromPlayer(World par1World, EntityPlayer par2EntityPlayer, boolean par3)
{
float var4 = 1.0F;
float var5 = par2EntityPlayer.prevRotationPitch + (par2EntityPlayer.rotationPitch - par2EntityPlayer.prevRotationPitch) * var4;
float var6 = par2EntityPlayer.prevRotationYaw + (par2EntityPlayer.rotationYaw - par2EntityPlayer.prevRotationYaw) * var4;
double var7 = par2EntityPlayer.prevPosX + (par2EntityPlayer.posX - par2EntityPlayer.prevPosX) * var4;
double var9 = par2EntityPlayer.prevPosY + (par2EntityPlayer.posY - par2EntityPlayer.prevPosY) * var4 + 1.62D - par2EntityPlayer.yOffset;
double var11 = par2EntityPlayer.prevPosZ + (par2EntityPlayer.posZ - par2EntityPlayer.prevPosZ) * var4;
//TODO- 1.7.10 fix?
Vec3 var13 = Vec3.createVectorHelper(var7, var9, var11);
float var14 = MathHelper.cos(-var6 * 0.017453292F - (float) Math.PI);
float var15 = MathHelper.sin(-var6 * 0.017453292F - (float) Math.PI);
float var16 = -MathHelper.cos(-var5 * 0.017453292F);
float var17 = MathHelper.sin(-var5 * 0.017453292F);
float var18 = var15 * var16;
float var20 = var14 * var16;
double var21 = 5.0D;
if(par2EntityPlayer instanceof EntityPlayerMP)
{
var21 = ((EntityPlayerMP) par2EntityPlayer).theItemInWorldManager.getBlockReachDistance();
}
Vec3 var23 = var13.addVector(var18 * var21, var17 * var21, var20 * var21);
return par1World.rayTraceBlocks(var13, var23, par3);
}
public static void rightClickMouse(ReturnValue<?> returnValue) {
SkyblockAddons main = SkyblockAddons.getInstance();
if (main.getUtils().isOnSkyblock()) {
Minecraft mc = Minecraft.getMinecraft();
if (mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY) {
Entity entityIn = mc.objectMouseOver.entityHit;
if (main.getConfigValues().isEnabled(Feature.DONT_OPEN_PROFILES_WITH_BOW)) {
if (entityIn instanceof EntityOtherPlayerMP && !NPCUtils.isNPC(entityIn)) {
ItemStack item = mc.thePlayer.inventory.getCurrentItem();
ItemStack itemInUse = mc.thePlayer.getItemInUse();
if ((isItemBow(item) || isItemBow(itemInUse))) {
if (System.currentTimeMillis() - lastProfileMessage > 20000) {
lastProfileMessage = System.currentTimeMillis();
main.getUtils().sendMessage(main.getConfigValues().getRestrictedColor(Feature.DONT_OPEN_PROFILES_WITH_BOW) +
Message.MESSAGE_STOPPED_OPENING_PROFILE.getMessage());
}
returnValue.cancel();
return;
}
}
}
if (main.getConfigValues().isEnabled(Feature.LOCK_SLOTS) && entityIn instanceof EntityItemFrame && ((EntityItemFrame)entityIn).getDisplayedItem() == null) {
int slot = mc.thePlayer.inventory.currentItem + 36;
if (main.getConfigValues().getLockedSlots().contains(slot) && slot >= 9) {
main.getUtils().playLoudSound("note.bass", 0.5);
main.getUtils().sendMessage(main.getConfigValues().getRestrictedColor(Feature.DROP_CONFIRMATION) + Message.MESSAGE_SLOT_LOCKED.getMessage());
returnValue.cancel();
}
}
}
}
}
public DrawBlockHighlightEvent(@NotNull EntityPlayer player, @NotNull MovingObjectPosition target, float partialTicks) {
Preconditions.checkNotNull(player, "player");
Preconditions.checkNotNull(target, "target");
this.player = player;
this.target = target;
this.partialTicks = partialTicks;
}
@InvokeEvent
public void onAttack(PlayerAttackEntityEvent event) {
if (mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY && mc.objectMouseOver.entityHit.getEntityId() ==
event.getEntity().getEntityId()) {
Vec3 vec = mc.getRenderViewEntity().getPositionEyes(1.0f);
double range = mc.objectMouseOver.hitVec.distanceTo(vec);
rangeText = new DecimalFormat(".##").format(range) + " blocks";
} else {
rangeText = "Not on target?";
}
lastAttack = System.currentTimeMillis();
}
public static int[] getMop() {
MovingObjectPosition preMop = Wrapper.INSTANCE.mc().objectMouseOver;
Entity ent = Wrapper.INSTANCE.mc().pointedEntity;
int[] arrn = new int[5];
arrn[0] = preMop.blockX;
arrn[1] = preMop.blockY;
arrn[2] = preMop.blockZ;
arrn[3] = preMop.sideHit;
arrn[4] = ent != null ? ent.getEntityId() : 0;
int[] mop = arrn;
return mop;
}
@Override
public void onMouse(MouseEvent event) {
MovingObjectPosition mop = Wrapper.INSTANCE.mc().objectMouseOver;
if (mop.sideHit == -1) {
return;
}
boolean nowState = Mouse.isButtonDown(1);
if (!prevState && nowState) {
prevState = nowState;
TileEntity entity = Wrapper.INSTANCE.world().getTileEntity(mop.blockX, mop.blockY, mop.blockZ);
try {
if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && entity != null && !Class.forName("eu.thesociety.DragonbornSR.DragonsRadioMod.Block.TileEntity.TileEntityRadio").isInstance(entity)) {
ByteBuf buf = Unpooled.buffer(0);
buf.writeByte(0);
buf.writeInt(0);
buf.writeDouble(mop.blockX);
buf.writeDouble(mop.blockY);
buf.writeDouble(mop.blockZ);
buf.writeInt(Wrapper.INSTANCE.player().dimension);
buf.writeInt(0);
buf.writeBytes(new byte[0]);
buf.writeBoolean(false);
buf.writeFloat(0);
buf.writeDouble(0);
buf.writeDouble(0);
buf.writeDouble(0);
C17PacketCustomPayload packet = new C17PacketCustomPayload("DragonsRadioMod", buf);
Wrapper.INSTANCE.player().sendQueue.addToSendQueue(packet);
InteropUtils.log("Crash sent", this);
if (event.isCancelable()) {
event.setCanceled(true);
}
}
} catch (Exception ex) {
InteropUtils.log("Error happened", this);
}
}
prevState = nowState;
}
public static boolean canNodeBeSeen(TileVisNode source,TileVisNode target)
{
MovingObjectPosition mop = ThaumcraftApiHelper.rayTraceIgnoringSource(source.getWorldObj(),
Vec3.createVectorHelper(source.xCoord+.5, source.yCoord+.5,source.zCoord+.5),
Vec3.createVectorHelper(target.xCoord+.5, target.yCoord+.5,target.zCoord+.5),
false, true, false);
return mop == null || (mop.typeOfHit==MovingObjectType.BLOCK &&
mop.blockX==target.xCoord && mop.blockY==target.yCoord && mop.blockZ==target.zCoord);
}
@Override
public String getWikiURL(World world, MovingObjectPosition pos) {
String name = getBlockName(world, pos);
if(name == null)
return null;
if(lowercase) {
return String.format(urlBase, name.toLowerCase().replaceAll(" ", replacement));
} else {
return String.format(urlBase, WordUtils.capitalizeFully(name).replaceAll(" ", replacement));
}
}
@Override
public void handleClientSide(EntityPlayer player) {
MovingObjectPosition pos = Minecraft.getMinecraft().objectMouseOver;
AbstractPacket packet = null;
if (pos != null)
if (pos.entityHit != null)
packet = new EntityRequestPacket(pos.entityHit.getEntityId());
else if (pos.typeOfHit == MovingObjectType.BLOCK)
packet = new TileRequestPacket(pos.blockX, pos.blockY, pos.blockZ);
if (packet == null)
sendMessageToPlayer(player, SECTION_SIGN + "cError - No tile or entity selected");
else
NBTEdit.DISPATCHER.sendToServer(packet);
}
@Override
public void onTicks() {
try {
MovingObjectPosition position = Wrapper.INSTANCE.mc().objectMouseOver;
boolean nowState = Mouse.isButtonDown(0);
if (position.sideHit != -1 && nowState && !prevState) {
snd.invoke(obj, msg.newInstance(position.blockX, position.blockY, position.blockZ));
}
prevState = nowState;
} catch (Exception ignored) {
}
}
@Override
public MovingObjectPosition collisionRayTrace (World world, int x, int y, int z, Vec3 startVec, Vec3 endVec) {
TileEntityGarden te = getGardenEntity(world, x, y, z);
BlockGarden garden = getGardenBlock(world, x, y, z);
if (te == null || garden == null)
return super.collisionRayTrace(world, x, y, z, startVec, endVec);
int baseY = getBaseBlockYCoord(world, x, y, z);
MovingObjectPosition mop = null;
for (int slot : garden.getSlotProfile().getPlantSlots()) {
Block block = getPlantBlock(te, slot);
if (block == null)
continue;
bindSlot(world, x, y, z, te, slot);
try {
float offsetX = garden.getSlotProfile().getPlantOffsetX(world, x, baseY, z, slot);
float offsetY = garden.getSlotProfile().getPlantOffsetY(world, x, baseY, z, slot);
float offsetZ = garden.getSlotProfile().getPlantOffsetZ(world, x, baseY, z, slot);
Vec3 slotStartVec = Vec3.createVectorHelper(startVec.xCoord - offsetX, startVec.yCoord - offsetY, startVec.zCoord - offsetZ);
Vec3 slotEndVec = Vec3.createVectorHelper(endVec.xCoord - offsetX, endVec.yCoord - offsetY, endVec.zCoord - offsetZ);
MovingObjectPosition sub = block.collisionRayTrace(world, x, y, z, slotStartVec, slotEndVec);
if (mop == null || slotStartVec.squareDistanceTo(mop.hitVec) > slotStartVec.squareDistanceTo(sub.hitVec))
mop = sub;
}
catch (Exception e) {
continue;
}
finally {
unbindSlot(world, x, y, z, te);
}
}
return mop;
}
@Override
public void onWorldRender(RenderWorldLastEvent event) {
MovingObjectPosition position = Wrapper.INSTANCE.mc().objectMouseOver;
Block block = Wrapper.INSTANCE.world().getBlock(position.blockX, position.blockY, position.blockZ);
if (block.getMaterial() != Material.air) {
this.drawESP(0.0f);
}
}
private void drawESP(MovingObjectPosition position) {
GL11.glPushMatrix();
GL11.glEnable(3042);
GL11.glBlendFunc(770, 771);
GL11.glLineWidth(1.0f);
GL11.glDisable(2896);
GL11.glDisable(3553);
GL11.glEnable(2848);
GL11.glDisable(2929);
GL11.glDepthMask(false);
double blockX = RenderManager.renderPosX;
double blockY = RenderManager.renderPosY;
double blockZ = RenderManager.renderPosZ;
Block block = Wrapper.INSTANCE.world().getBlock(position.blockX, position.blockY, position.blockZ);
GL11.glColor4f(0.0f, 0.0f, 0.0f, 0.2f);
BlockOverlay.drawOutlinedBoundingBox(block.getSelectedBoundingBoxFromPool(Wrapper.INSTANCE.world(), position.blockX, position.blockY, position.blockZ).expand(0.002, 0.002, 0.002).getOffsetBoundingBox(-blockX, -blockY, -blockZ));
GL11.glColor4f(0.0f, 0.4f, 0.0f, 0.2f);
BlockOverlay.drawBoundingBox(block.getSelectedBoundingBoxFromPool(Wrapper.INSTANCE.world(), position.blockX, position.blockY, position.blockZ).expand(0.002, 0.002, 0.002).getOffsetBoundingBox(-blockX, -blockY, -blockZ));
GL11.glLineWidth(1.0f);
GL11.glDisable(2848);
GL11.glEnable(3553);
GL11.glEnable(2896);
GL11.glEnable(2929);
GL11.glDepthMask(true);
GL11.glDisable(3042);
GL11.glPopMatrix();
}
public Entity getMouseOver(float partialTicks, double distance, boolean canBeCollidedWith) {
Minecraft mc = Wrapper.INSTANCE.mc();
Entity pointedEntity = null;
MovingObjectPosition rayTrace = null;
if (mc.renderViewEntity != null) {
if (mc.theWorld != null) {
Vec3 positionVec = mc.renderViewEntity.getPosition(partialTicks);
Vec3 lookVec = mc.renderViewEntity.getLook(partialTicks);
Vec3 posDistVec = positionVec.addVector(lookVec.xCoord * distance, lookVec.yCoord * distance, lookVec.zCoord * distance);
double boxExpand = 1.0F;
@SuppressWarnings("unchecked")
List<Entity> entities = mc.theWorld.getEntitiesWithinAABBExcludingEntity(mc.renderViewEntity, mc.renderViewEntity.boundingBox.addCoord(lookVec.xCoord * distance, lookVec.yCoord * distance, lookVec.zCoord * distance).expand(boxExpand, boxExpand, boxExpand));
double mincalc = Double.MAX_VALUE;
for (Entity entity : entities) {
if (!canBeCollidedWith || entity.canBeCollidedWith()) {
double borderSize = entity.getCollisionBorderSize();
AxisAlignedBB expEntityBox = entity.boundingBox.expand(borderSize, borderSize, borderSize);
MovingObjectPosition calculateInterceptPos = expEntityBox.calculateIntercept(positionVec, posDistVec);
if (calculateInterceptPos != null) {
double calcInterceptPosDist = positionVec.distanceTo(calculateInterceptPos.hitVec);
if (mincalc > calcInterceptPosDist) {
mincalc = calcInterceptPosDist;
pointedEntity = entity;
}
}
}
}
if (pointedEntity != null) {
return pointedEntity;
}
}
}
return null;
}
@Override
public List<String> getWailaBody(ItemStack stack, List<String> strings, IWailaDataAccessor accessor, IWailaConfigHandler configHandler) {
if (accessor.getBlock() instanceof ICarvable) {
ICarvable block = (ICarvable) accessor.getBlock();
MovingObjectPosition pos = accessor.getPosition();
strings.add(block.getManager(accessor.getWorld(), pos.blockX, pos.blockY, pos.blockZ, accessor.getMetadata()).getDescription());
}
return strings;
}
public static boolean canNodeBeSeen(TileVisNode source,TileVisNode target)
{
MovingObjectPosition mop = ThaumcraftApiHelper.rayTraceIgnoringSource(source.getWorldObj(),
Vec3.createVectorHelper(source.xCoord+.5, source.yCoord+.5,source.zCoord+.5),
Vec3.createVectorHelper(target.xCoord+.5, target.yCoord+.5,target.zCoord+.5),
false, true, false);
return mop == null || (mop.typeOfHit==MovingObjectType.BLOCK &&
mop.blockX==target.xCoord && mop.blockY==target.yCoord && mop.blockZ==target.zCoord);
}
@Override
public void onBlockClicked(World world, BlockPos pos, EntityPlayer player) {
Block blockInstance = getBlockInstance(world, VectorConverter.instance().toNova(pos));
MovingObjectPosition mop = player.rayTrace(10, 1);
Block.LeftClickEvent evt = new Block.LeftClickEvent(EntityConverter.instance().toNova(player), DirectionConverter.instance().toNova(mop.sideHit), VectorConverter.instance().toNova(mop.hitVec));
blockInstance.events.publish(evt);
}