下面列出了怎么用net.minecraft.util.ScreenShotHelper的API类实例代码及写法,或者点击链接到github查看源代码。
@Inject(
method = "dispatchKeypresses",
at = @At(
value = "INVOKE",
shift = At.Shift.BEFORE,
target = "Lnet/minecraft/client/gui/GuiNewChat;printChatMessage(Lnet/minecraft/util/IChatComponent;)V",
ordinal = 1
),
cancellable = true
)
private void dispatchKeypresses(CallbackInfo ci) {
IChatComponent chatComponent = ScreenShotHelper.saveScreenshot(mcDataDir, displayWidth, displayHeight, framebufferMc);
new TextComponent(chatComponent).chat();
ci.cancel();
}
public void createAndSetPreviewImage()
{
LitematicaSchematic schematic = LitematicaSchematic.createFromFile(this.dir, this.fileName);
if (schematic != null)
{
try
{
Minecraft mc = Minecraft.getMinecraft();
BufferedImage screenshot = ScreenShotHelper.createScreenshot(mc.displayWidth, mc.displayHeight, mc.getFramebuffer());
int x = screenshot.getWidth() >= screenshot.getHeight() ? (screenshot.getWidth() - screenshot.getHeight()) / 2 : 0;
int y = screenshot.getHeight() >= screenshot.getWidth() ? (screenshot.getHeight() - screenshot.getWidth()) / 2 : 0;
int longerSide = Math.min(screenshot.getWidth(), screenshot.getHeight());
//System.out.printf("w: %d, h: %d, x: %d, y: %d\n", screenshot.getWidth(), screenshot.getHeight(), x, y);
int previewDimensions = 140;
double scaleFactor = (double) previewDimensions / longerSide;
BufferedImage scaled = new BufferedImage(previewDimensions, previewDimensions, BufferedImage.TYPE_INT_ARGB);
AffineTransform at = new AffineTransform();
at.scale(scaleFactor, scaleFactor);
AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BICUBIC);
Graphics2D graphics = scaled.createGraphics();
graphics.drawImage(screenshot.getSubimage(x, y, longerSide, longerSide), scaleOp, 0, 0);
int[] pixels = scaled.getRGB(0, 0, previewDimensions, previewDimensions, null, 0, scaled.getWidth());
schematic.getMetadata().setPreviewImagePixelData(pixels);
schematic.getMetadata().setTimeModifiedToNow();
schematic.writeToFile(this.dir, this.fileName, true);
InfoUtils.showGuiOrInGameMessage(MessageType.SUCCESS, "litematica.info.schematic_manager.preview.success");
}
catch (Exception e)
{
Litematica.logger.warn("Exception while creating preview image", e);
}
}
else
{
InfoUtils.showGuiOrInGameMessage(MessageType.ERROR, "litematica.error.schematic_rename.read_failed");
}
}