Move everything to com.replaymod package Add KeyBindingRegistry and SettingsRegistry Recreate settings GUI with new GUI API and dynamically from SettingsRegistry Use ReplayFile from ReplayStudio ReplayHandler is now object oriented Add GuiOverlay, GuiSlider and GuiTexturedButton to GUI API Rewrite both overlays to use new GUI API Fix size capping in vertical and horizontal layout Allow CustomLayouts to have parents Fix tooltip rendering when close to screen border Allow changing of columns in GridLayout
112 lines
3.4 KiB
Java
112 lines
3.4 KiB
Java
package eu.crushedpixel.replaymod.assets;
|
|
|
|
import eu.crushedpixel.replaymod.registry.ResourceHelper;
|
|
import eu.crushedpixel.replaymod.utils.BoundingUtils;
|
|
import eu.crushedpixel.replaymod.utils.BufferedImageUtils;
|
|
import lombok.EqualsAndHashCode;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.gui.Gui;
|
|
import net.minecraft.client.renderer.texture.DynamicTexture;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import org.lwjgl.util.Dimension;
|
|
|
|
import javax.imageio.ImageIO;
|
|
import java.awt.image.BufferedImage;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.io.OutputStream;
|
|
import java.util.UUID;
|
|
|
|
@EqualsAndHashCode(of={"name", "bufferedImageHashCode"})
|
|
public class ReplayImageAsset implements ReplayAsset<BufferedImage> {
|
|
|
|
private final Minecraft mc = Minecraft.getMinecraft();
|
|
|
|
private BufferedImage object;
|
|
private int bufferedImageHashCode;
|
|
|
|
private String name;
|
|
|
|
@Override
|
|
public ReplayImageAsset copy() {
|
|
ReplayImageAsset newReplay = new ReplayImageAsset(name);
|
|
newReplay.object = object;
|
|
newReplay.bufferedImageHashCode = bufferedImageHashCode;
|
|
|
|
return newReplay;
|
|
}
|
|
|
|
public ReplayImageAsset(String name) {
|
|
this.name = name;
|
|
}
|
|
|
|
@Override
|
|
public String getAssetName() {
|
|
return name;
|
|
}
|
|
|
|
@Override
|
|
public void setAssetName(String name) {
|
|
this.name = name;
|
|
}
|
|
|
|
@Override
|
|
public String getDisplayString() {
|
|
return name;
|
|
}
|
|
|
|
@Override
|
|
public String getSavedFileExtension() {
|
|
return "png";
|
|
}
|
|
|
|
@Override
|
|
public void loadFromStream(InputStream inputStream) throws IOException {
|
|
this.object = ImageIO.read(inputStream);
|
|
this.bufferedImageHashCode = BufferedImageUtils.hashCode(object);
|
|
ResourceHelper.freeResource(previewResource);
|
|
|
|
// TODO
|
|
// for(CustomImageObject object : ReplayHandler.getCustomImageObjects()) {
|
|
// if(object.getLinkedAsset() != null && object.getLinkedAsset().equals(ReplayHandler.getAssetRepository().getUUIDForAsset(this))) {
|
|
// object.setImage(this.object);
|
|
// }
|
|
// }
|
|
}
|
|
|
|
@Override
|
|
public void writeToStream(OutputStream outputStream) throws IOException {
|
|
ImageIO.write(object, "png", outputStream);
|
|
}
|
|
|
|
@Override
|
|
public BufferedImage getObject() {
|
|
return object;
|
|
}
|
|
|
|
private ResourceLocation previewResource = new ResourceLocation("/asset/"+ UUID.randomUUID().toString());
|
|
private DynamicTexture dynamicTexture;
|
|
|
|
@Override
|
|
public void drawToScreen(int x, int y, int maxWidth, int maxHeight) {
|
|
if(object == null) return;
|
|
if(!ResourceHelper.isRegistered(previewResource) || dynamicTexture == null) {
|
|
dynamicTexture = new DynamicTexture(object);
|
|
mc.getTextureManager().loadTexture(previewResource, dynamicTexture);
|
|
ResourceHelper.registerResource(previewResource);
|
|
}
|
|
|
|
mc.renderEngine.bindTexture(previewResource);
|
|
|
|
Dimension dimension = BoundingUtils.fitIntoBounds(new Dimension(object.getWidth(), object.getHeight()), new Dimension(maxWidth, maxHeight));
|
|
|
|
Gui.drawScaledCustomSizeModalRect(x, y, 0, 0, object.getWidth(), object.getHeight(), dimension.getWidth(), dimension.getHeight(), object.getWidth(), object.getHeight());
|
|
}
|
|
|
|
@Override
|
|
protected void finalize() throws Throwable {
|
|
ResourceHelper.freeResource(previewResource);
|
|
super.finalize();
|
|
}
|
|
}
|