Add internal resources

This commit is contained in:
Thinkofdeath 2015-09-19 19:08:28 +01:00
parent 1ab2683a53
commit 81b62d9ce4
13 changed files with 188 additions and 6 deletions

View File

@ -2,6 +2,7 @@
name = "steven"
version = "0.0.1"
authors = [ "Thinkofdeath <thinkofdeath@spigotmc.org>" ]
build = "build.rs"
[dependencies]
rustc-serialize = "0.3"

37
build.rs Normal file
View File

@ -0,0 +1,37 @@
use std::env;
use std::fs;
use std::path::Path;
use std::io::BufWriter;
use std::io::Write;
fn main() {
let out_dir = env::var("OUT_DIR").unwrap();
let dest = Path::new(&out_dir);
let base = Path::new("resources");
let mut out = Vec::new();
build_map(&mut out, &base);
let mut file = BufWriter::new(fs::File::create(&dest.join("resources.rs")).unwrap());
write!(file, "pub fn get_file(name: &str) -> Option<&'static [u8]> {{\n").unwrap();
write!(file, " match name {{\n").unwrap();
for entry in &out {
let entry = entry.replace("\\", "/");
let short = &entry["resources/".len()..];
write!(file, " {:?} => Some(include_bytes!(\"../{}\")),\n", short, entry).unwrap();
}
write!(file, " _ => None\n }}\n}}\n").unwrap();
}
fn build_map(out: &mut Vec<String>, path: &Path) {
let files = fs::read_dir(path).unwrap();
for entry in files {
let entry = entry.unwrap();
if fs::metadata(entry.path()).unwrap().is_dir() {
build_map(out, &entry.path());
} else {
out.push(entry.path().to_str().unwrap().to_owned());
}
}
}

View File

@ -0,0 +1,52 @@
I blame Xor
Its not a bug its a feature!
Don't go to #think, tis a silly place
Tested! (In production)
Not in scala!
Its steven not phteven!
Now webscale!
Meow
I bet one of cindy's cats broke it!
=^.^=
ಠ_ಠ
Commit reverted in 5..4..3...
Latest is greatest!
[This space is intentionally left blank]
ThinkBot: .... *Thinkofdeath damn it
Now with more bugs!
I blame Mojang
The logo is totally not ascii art rendered as textures
Look, it works on my machine.
Open Source! https://github.com/thinkofdeath/steven
Built with Go!
try { } catch (Exception e) { }
panic(recover())
// Abandon hope all ye who enter here
Its like I'm racing vanilla to see who can have the most bugs
Using ascii art for the logo seemed like a bad idea at first
... and still does.
Help! I'm trapped in the splash text!
Linux support!
Windows support!
Mac support! (in theory)
Come chat on IRC!
Knowing Murphy's Law doesn't help
Minecraft Multi-processing: breaking three things at once
Silly Mortal...
Software isn't released. It's allowed to escape.
General System Error: Please sacrifice a cow and two chickens to continue
Do you want to build a client?
sudo rm -rf --no-preserve-root /
Thinkofdeath.getClass().getField("sanity").set(Thinkofdeath, null);
Now with potatoes!
And then you cleanse them in a ball of atomic fire!
I'm a little matrix, square and stout,
this is my transpose, this is my count.
var f = function() { return f; };
unsafe.allocateObject(Unsafe.class);
:(){ :|:& };:
You must pay to view this content.
No touchy the topic
Ceci n'est pas un splash.
Xor is not actually a cat.
The MD5 of md_5 is e14cfacdd442a953343ebd8529138680

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,5 @@
{
"variants": {
"normal": { "model": "missing_block" }
}
}

View File

@ -0,0 +1,16 @@
SSSSSSSSSSSSSSS tttt
SS:::::::::::::::S ttt:::t
S:::::SSSSSS::::::S t:::::t
S:::::S SSSSSSS t:::::t
S:::::S ttttttt:::::ttttttt eeeeeeeeeeee vvvvvvv vvvvvvv eeeeeeeeeeee nnnn nnnnnnnn
S:::::S t:::::::::::::::::t ee::::::::::::ee v:::::v v:::::v ee::::::::::::ee n:::nn::::::::nn
S::::SSSS t:::::::::::::::::t e::::::eeeee:::::ee v:::::v v:::::v e::::::eeeee:::::een::::::::::::::nn
SS::::::SSSSS tttttt:::::::tttttt e::::::e e:::::e v:::::v v:::::v e::::::e e:::::enn:::::::::::::::n
SSS::::::::SS t:::::t e:::::::eeeee::::::e v:::::v v:::::v e:::::::eeeee::::::e n:::::nnnn:::::n
SSSSSS::::S t:::::t e:::::::::::::::::e v:::::v v:::::v e:::::::::::::::::e n::::n n::::n
S:::::S t:::::t e::::::eeeeeeeeeee v:::::v:::::v e::::::eeeeeeeeeee n::::n n::::n
S:::::S t:::::t tttttte:::::::e v:::::::::v e:::::::e n::::n n::::n
SSSSSSS S:::::S t::::::tttt:::::te::::::::e v:::::::v e::::::::e n::::n n::::n
S::::::SSSSSS:::::S tt::::::::::::::t e::::::::eeeeeeee v:::::v e::::::::eeeeeeee n::::n n::::n
S:::::::::::::::SS tt:::::::::::tt ee:::::::::::::e v:::v ee:::::::::::::e n::::n n::::n
SSSSSSSSSSSSSSS ttttttttttt eeeeeeeeeeeeee vvv eeeeeeeeeeeeee nnnnnn nnnnnn

View File

@ -0,0 +1,22 @@
blocks/cobblestone
blocks/netherrack
blocks/dirt
blocks/planks_oak
blocks/brick
blocks/snow
blocks/sand
blocks/gravel
blocks/hardened_clay
blocks/clay
blocks/bedrock
blocks/obsidian
blocks/end_stone
blocks/stone_andesite
blocks/dirt_podzol_top
blocks/portal
blocks/prismarine_rough
blocks/soul_sand
blocks/lava_still
blocks/hay_block_top
blocks/log_acacia
blocks/red_sandstone_carved

View File

@ -0,0 +1,18 @@
{
"textures": {
"all": "missing_texture"
},
"elements": [
{ "from": [ 0, 0, 0 ],
"to": [ 16, 16, 16 ],
"faces": {
"down": { "texture": "#all", "cullface": "down" },
"up": { "texture": "#all", "cullface": "up" },
"north": { "texture": "#all", "cullface": "north" },
"south": { "texture": "#all", "cullface": "south" },
"west": { "texture": "#all", "cullface": "west" },
"east": { "texture": "#all", "cullface": "east" }
}
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 B

View File

@ -63,6 +63,15 @@ fn main() {
let mut last_frame = time::now();
let frame_time = (time::Duration::seconds(1).num_nanoseconds().unwrap() as f64) / 60.0;
// Test stuff
let img = ui::Image::new(
render::Renderer::get_texture(renderer.get_textures_ref(), "steven:gui/cog"),
50.0, 50.0, 100.0, 100.0,
0.0, 0.0, 1.0, 1.0,
255, 255, 255
);
let img_ref = ui_container.add(img);
while !window.should_close() {
{ resource_manager.write().unwrap().tick(); }
let now = time::now();

View File

@ -240,8 +240,6 @@ impl TextureManager {
self.textures.get(name).map(|v| v.clone())
}
// TODO: Animated textures
fn load_texture(&mut self, name: &str) {
let (plugin, name) = if let Some(pos) = name.find(':') {
(&name[..pos], &name[pos+1..])
@ -271,7 +269,7 @@ impl TextureManager {
return;
}
}
self.insert_texture_dummy(name);
self.insert_texture_dummy(plugin, name);
}
fn load_animation(&mut self, plugin: &str, name: &str, img: &image::DynamicImage, data: Vec<u8>) -> Option<AnimatedTexture> {
@ -366,10 +364,18 @@ impl TextureManager {
(index, rect.unwrap())
}
fn insert_texture_dummy(&mut self, name: &str) -> Texture {
fn insert_texture_dummy(&mut self, plugin: &str, name: &str) -> Texture {
let missing = self.get_texture("steven:missing_texture").unwrap();
let mut full_name = String::new();
if plugin != "minecraft" {
full_name.push_str(plugin);
full_name.push_str(":");
}
full_name.push_str(name);
let t = Texture {
name: name.to_owned(),
name: full_name.to_owned(),
version: self.version,
atlas: missing.atlas,
x: missing.x,
@ -382,7 +388,7 @@ impl TextureManager {
rel_height: 1.0,
is_rel: false,
};
self.textures.insert(name.to_owned(), t.clone());
self.textures.insert(full_name.to_owned(), t.clone());
t
}
}

View File

@ -21,6 +21,10 @@ use std::io;
use std::fs;
use std::sync::mpsc;
mod internal {
include!(concat!(env!("OUT_DIR"), "/resources.rs"));
}
const RESOURCES_VERSION: &'static str = "15w37a";
pub trait Pack {
@ -41,6 +45,7 @@ impl Manager {
version: 0,
vanilla_chan: None,
};
m.add_pack(Box::new(InternalPack));
m.download_vanilla();
m
}
@ -168,6 +173,17 @@ impl Pack for DirPack {
}
}
struct InternalPack;
impl Pack for InternalPack {
fn open(&self, name: &str) -> Option<Box<io::Read>> {
match internal::get_file(name) {
Some(val) => Some(Box::new(io::Cursor::new(val))),
None => None,
}
}
}
struct ProgressRead<T> {
read: T,
total: u64,