bruh this dont even work

This commit is contained in:
Aether 2024-10-16 16:35:21 -04:00
parent d508fad79b
commit 3ef2c9c6bc
27 changed files with 474 additions and 154 deletions

View File

@ -42,7 +42,7 @@ def folder = "javascript"
def name = "classes.js"
teavm.js {
obfuscated = true
obfuscated = false
sourceMap = true
targetFileName = "../" + name
optimization = OptimizationLevel.BALANCED // Change to "AGGRESSIVE" for release
@ -56,17 +56,17 @@ teavm.js {
debugInformation = false
}
tasks.named("generateJavaScript") {
doLast {
// tasks.named("generateJavaScript") {
// doLast {
// NOTE: This step may break at any time, and is not required for 99% of browsers
// // NOTE: This step may break at any time, and is not required for 99% of browsers
def phile = file(folder + "/" + name)
def dest = phile.getText("UTF-8")
def i = dest.substring(0, dest.indexOf("=\$rt_globals.Symbol('jsoClass');")).lastIndexOf("let ")
dest = dest.substring(0, i) + "var" + dest.substring(i + 3)
def j = dest.indexOf("function(\$rt_globals,\$rt_exports){")
dest = dest.substring(0, j + 34) + "\n" + file(folder + "/ES6ShimScript.txt").getText("UTF-8") + "\n" + dest.substring(j + 34)
phile.write(dest, "UTF-8")
}
}
// def phile = file(folder + "/" + name)
// def dest = phile.getText("UTF-8")
// def i = dest.substring(0, dest.indexOf("=\$rt_globals.Symbol('jsoClass');")).lastIndexOf("let ")
// dest = dest.substring(0, i) + "var" + dest.substring(i + 3)
// def j = dest.indexOf("function(\$rt_globals,\$rt_exports){")
// dest = dest.substring(0, j + 34) + "\n" + file(folder + "/ES6ShimScript.txt").getText("UTF-8") + "\n" + dest.substring(j + 34)
// phile.write(dest, "UTF-8")
// }
// }

View File

@ -0,0 +1 @@
hello :3

View File

@ -1678,6 +1678,23 @@
"random/glass3"
]
},
"block.chorus_flower.grow": {
"category": "block",
"sounds": [
"block/chorus_flower/grow1",
"block/chorus_flower/grow2",
"block/chorus_flower/grow3",
"block/chorus_flower/grow4"
]
},
"block.chorus_flower.death": {
"category": "block",
"sounds": [
"block/chorus_flower/death1",
"block/chorus_flower/death2",
"block/chorus_flower/death3"
]
},
"game.potion.smash": {
"category": "neutral",
"sounds": [

View File

@ -126,13 +126,12 @@ public class BlockChorusFlower extends Block {
private void placeGrownFlower(World p_185602_1_, BlockPos p_185602_2_, int p_185602_3_) {
p_185602_1_.setBlockState(p_185602_2_, this.getDefaultState().withProperty(AGE, Integer.valueOf(p_185602_3_)),
2);
// TODO: implement soundf
// p_185602_1_.playAuxSFX(1033, p_185602_2_, 0);
p_185602_1_.playAuxSFX(1033, p_185602_2_, 0);
}
private void placeDeadFlower(World p_185605_1_, BlockPos p_185605_2_) {
p_185605_1_.setBlockState(p_185605_2_, this.getDefaultState().withProperty(AGE, Integer.valueOf(5)), 2);
// p_185605_1_.playAuxSFX(1034, p_185605_2_, 0);
p_185605_1_.playAuxSFX(1034, p_185605_2_, 0);
}
private static boolean areAllNeighborsEmpty(World p_185604_0_, BlockPos p_185604_1_, EnumFacing p_185604_2_) {
@ -270,7 +269,7 @@ public class BlockChorusFlower extends Block {
if (!flag) {
worldIn.setBlockState(p_185601_1_.up(i),
EaglerItems.getEaglerBlock("chorus_plant").getDefaultState().withProperty(AGE, Integer.valueOf(5)),
EaglerItems.getEaglerBlock("chorus_flower").getDefaultState().withProperty(AGE, Integer.valueOf(5)),
2);
}
}

View File

@ -49,6 +49,7 @@ import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.ISound;
import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.audio.SoundCategory;
import net.minecraft.client.multiplayer.WorldClient;
import net.minecraft.client.particle.EntityFX;
import net.minecraft.client.renderer.chunk.CompiledChunk;
@ -2390,6 +2391,12 @@ public class RenderGlobal implements IWorldAccess, IResourceManagerReloadListene
this.theWorld.playSoundAtPos(blockpos, "random.anvil_land", 0.3F,
this.theWorld.rand.nextFloat() * 0.1F + 0.9F, false);
break;
case 1033:
this.theWorld.playSoundAtPos(blockpos, "block.chorus_flower.grow", 1.0F, 1.0F, false);
break;
case 1034:
this.theWorld.playSoundAtPos(blockpos, "block.chorus_flower.death", 1.0F, 1.0F, false);
break;
case 2000:
int j1 = j % 3 - 1;
int k = j / 3 % 3 - 1;

View File

@ -64,16 +64,18 @@ public class TileEntityItemStackRenderer {
if (itemStackIn.getItem() == Items.banner) {
this.banner.setItemValues(itemStackIn);
TileEntityRendererDispatcher.instance.renderTileEntityAt(this.banner, 0.0D, 0.0D, 0.0D, 0.0F);
} else if (itemStackIn.getItem() == EaglerItems.getEaglerItem("shield")) {
{
Minecraft.getMinecraft().getTextureManager().bindTexture(SHIELD_BASE_TEXTURE);
GlStateManager.pushMatrix();
GlStateManager.scale(1.0F, -1.0F, -1.0F);
this.modelShield.render();
GlStateManager.popMatrix();
}
} else if (itemStackIn.getItem() == Items.skull) {
// else if (itemStackIn.getItem() == EaglerItems.getEaglerItem("shield")) {
// {
// Minecraft.getMinecraft().getTextureManager().bindTexture(SHIELD_BASE_TEXTURE);
// GlStateManager.pushMatrix();
// GlStateManager.scale(1.0F, -1.0F, -1.0F);
// this.modelShield.render();
// GlStateManager.popMatrix();
// }
// }
else if (itemStackIn.getItem() == Items.skull) {
GameProfile gameprofile = null;
if (itemStackIn.hasTagCompound()) {
NBTTagCompound nbttagcompound = itemStackIn.getTagCompound();

View File

@ -2323,18 +2323,18 @@ public abstract class Entity implements ICommandSender {
return Entity.this.getName();
}
});
category.addCrashSection("Entity\'s Exact location", String.format("%.2f, %.2f, %.2f",
new Object[] { Double.valueOf(this.posX), Double.valueOf(this.posY), Double.valueOf(this.posZ) }));
category.addCrashSection("Entity\'s Block location",
CrashReportCategory.getCoordinateInfo((double) MathHelper.floor_double(this.posX),
(double) MathHelper.floor_double(this.posY), (double) MathHelper.floor_double(this.posZ)));
category.addCrashSection("Entity\'s Momentum", String.format("%.2f, %.2f, %.2f", new Object[] {
Double.valueOf(this.motionX), Double.valueOf(this.motionY), Double.valueOf(this.motionZ) }));
category.addCrashSectionCallable("Entity\'s Rider", new Callable<String>() {
public String call() throws Exception {
return Entity.this.riddenByEntity.toString();
}
});
// category.addCrashSection("Entity\'s Exact location", String.format("%.2f, %.2f, %.2f",
// new Object[] { Double.valueOf(this.posX), Double.valueOf(this.posY), Double.valueOf(this.posZ) }));
// category.addCrashSection("Entity\'s Block location",
// CrashReportCategory.getCoordinateInfo((double) MathHelper.floor_double(this.posX),
// (double) MathHelper.floor_double(this.posY), (double) MathHelper.floor_double(this.posZ)));
// category.addCrashSection("Entity\'s Momentum", String.format("%.2f, %.2f, %.2f", new Object[] {
// Double.valueOf(this.motionX), Double.valueOf(this.motionY), Double.valueOf(this.motionZ) }));
// category.addCrashSectionCallable("Entity\'s Rider", new Callable<String>() {
// public String call() throws Exception {
// return Entity.this.riddenByEntity.toString();
// }
// });
category.addCrashSectionCallable("Entity\'s Vehicle", new Callable<String>() {
public String call() throws Exception {
return Entity.this.ridingEntity.toString();

View File

@ -2,6 +2,7 @@ package net.minecraft.world.gen;
import java.util.List;
import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom;
import net.minecraft.block.BlockChorusFlower;
import net.minecraft.block.BlockFalling;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
@ -15,6 +16,7 @@ import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.chunk.ChunkPrimer;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenEndIsland;
/**
* +
@ -46,73 +48,85 @@ import net.minecraft.world.chunk.IChunkProvider;
*
*/
public class ChunkProviderEnd implements IChunkProvider {
private EaglercraftRandom endRNG;
private NoiseGeneratorOctaves noiseGen1;
private NoiseGeneratorOctaves noiseGen2;
private NoiseGeneratorOctaves noiseGen3;
public NoiseGeneratorOctaves noiseGen4;
private EaglercraftRandom rand;
protected static final IBlockState END_STONE = Blocks.end_stone.getDefaultState();
protected static final IBlockState AIR = Blocks.air.getDefaultState();
private final NoiseGeneratorOctaves lperlinNoise1;
private final NoiseGeneratorOctaves lperlinNoise2;
private final NoiseGeneratorOctaves perlinNoise1;
public NoiseGeneratorOctaves noiseGen5;
private World endWorld;
private double[] densities;
public NoiseGeneratorOctaves noiseGen6;
private final World worldObj;
private final boolean mapFeaturesEnabled;
// private final MapGenEndCity endCityGen = new MapGenEndCity(this);
private final NoiseGeneratorSimplex islandNoise;
private double[] buffer;
private BiomeGenBase[] biomesForGeneration;
double[] noiseData1;
double[] noiseData2;
double[] noiseData3;
double[] noiseData4;
double[] noiseData5;
double[] pnr;
double[] ar;
double[] br;
private final WorldGenEndIsland endIslands = new WorldGenEndIsland();
public ChunkProviderEnd(World worldIn, long parLong1) {
this.endWorld = worldIn;
this.endRNG = new EaglercraftRandom(parLong1, !worldIn.getWorldInfo().isOldEaglercraftRandom());
this.noiseGen1 = new NoiseGeneratorOctaves(this.endRNG, 16);
this.noiseGen2 = new NoiseGeneratorOctaves(this.endRNG, 16);
this.noiseGen3 = new NoiseGeneratorOctaves(this.endRNG, 8);
this.noiseGen4 = new NoiseGeneratorOctaves(this.endRNG, 10);
this.noiseGen5 = new NoiseGeneratorOctaves(this.endRNG, 16);
this.worldObj = worldIn;
this.mapFeaturesEnabled = true; // TODO: add this
this.rand = new EaglercraftRandom(parLong1, !worldIn.getWorldInfo().isOldEaglercraftRandom());
this.lperlinNoise1 = new NoiseGeneratorOctaves(this.rand, 16);
this.lperlinNoise2 = new NoiseGeneratorOctaves(this.rand, 16);
this.perlinNoise1 = new NoiseGeneratorOctaves(this.rand, 8);
this.noiseGen5 = new NoiseGeneratorOctaves(this.rand, 10);
this.noiseGen6 = new NoiseGeneratorOctaves(this.rand, 16);
this.islandNoise = new NoiseGeneratorSimplex(this.rand);
}
public void func_180520_a(int parInt1, int parInt2, ChunkPrimer parChunkPrimer) {
byte b0 = 2;
int i = b0 + 1;
byte b1 = 33;
int j = b0 + 1;
this.densities = this.initializeNoiseField(this.densities, parInt1 * b0, 0, parInt2 * b0, i, b1, j);
int i = 2;
int j = i + 1;
int k = 33;
int l = i + 1;
this.buffer = this.initializeNoiseField(this.buffer, parInt1 * i, 0, parInt2 * i, j, k, l);
for (int k = 0; k < b0; ++k) {
for (int l = 0; l < b0; ++l) {
for (int i1 = 0; i1 < 32; ++i1) {
for (int i1 = 0; i1 < i; ++i1) {
for (int j1 = 0; j1 < i; ++j1) {
for (int k1 = 0; k1 < 32; ++k1) {
double d0 = 0.25D;
double d1 = this.densities[((k + 0) * j + l + 0) * b1 + i1 + 0];
double d2 = this.densities[((k + 0) * j + l + 1) * b1 + i1 + 0];
double d3 = this.densities[((k + 1) * j + l + 0) * b1 + i1 + 0];
double d4 = this.densities[((k + 1) * j + l + 1) * b1 + i1 + 0];
double d5 = (this.densities[((k + 0) * j + l + 0) * b1 + i1 + 1] - d1) * d0;
double d6 = (this.densities[((k + 0) * j + l + 1) * b1 + i1 + 1] - d2) * d0;
double d7 = (this.densities[((k + 1) * j + l + 0) * b1 + i1 + 1] - d3) * d0;
double d8 = (this.densities[((k + 1) * j + l + 1) * b1 + i1 + 1] - d4) * d0;
double d1 = this.buffer[((i1 + 0) * l + j1 + 0) * k + k1 + 0];
double d2 = this.buffer[((i1 + 0) * l + j1 + 1) * k + k1 + 0];
double d3 = this.buffer[((i1 + 1) * l + j1 + 0) * k + k1 + 0];
double d4 = this.buffer[((i1 + 1) * l + j1 + 1) * k + k1 + 0];
double d5 = (this.buffer[((i1 + 0) * l + j1 + 0) * k + k1 + 1] - d1) * d0;
double d6 = (this.buffer[((i1 + 0) * l + j1 + 1) * k + k1 + 1] - d2) * d0;
double d7 = (this.buffer[((i1 + 1) * l + j1 + 0) * k + k1 + 1] - d3) * d0;
double d8 = (this.buffer[((i1 + 1) * l + j1 + 1) * k + k1 + 1] - d4) * d0;
for (int j1 = 0; j1 < 4; ++j1) {
for (int l1 = 0; l1 < 4; ++l1) {
double d9 = 0.125D;
double d10 = d1;
double d11 = d2;
double d12 = (d3 - d1) * d9;
double d13 = (d4 - d2) * d9;
for (int k1 = 0; k1 < 8; ++k1) {
for (int i2 = 0; i2 < 8; ++i2) {
double d14 = 0.125D;
double d15 = d10;
double d16 = (d11 - d10) * d14;
for (int l1 = 0; l1 < 8; ++l1) {
IBlockState iblockstate = null;
for (int j2 = 0; j2 < 8; ++j2) {
IBlockState iblockstate = AIR;
if (d15 > 0.0D) {
iblockstate = Blocks.end_stone.getDefaultState();
iblockstate = END_STONE;
}
int i2 = k1 + k * 8;
int j2 = j1 + i1 * 4;
int k2 = l1 + l * 8;
parChunkPrimer.setBlockState(i2, j2, k2, iblockstate);
int k2 = i2 + i1 * 8;
int l2 = l1 + k1 * 4;
int i3 = j2 + j1 * 8;
parChunkPrimer.setBlockState(k2, l2, i3, iblockstate);
d15 += d16;
}
@ -128,37 +142,38 @@ public class ChunkProviderEnd implements IChunkProvider {
}
}
}
}
public void func_180519_a(ChunkPrimer parChunkPrimer) {
for (int i = 0; i < 16; ++i) {
for (int j = 0; j < 16; ++j) {
byte b0 = 1;
int k = -1;
IBlockState iblockstate = Blocks.end_stone.getDefaultState();
IBlockState iblockstate1 = Blocks.end_stone.getDefaultState();
int k = 1;
int l = -1;
IBlockState iblockstate = END_STONE;
IBlockState iblockstate1 = END_STONE;
for (int i1 = 127; i1 >= 0; --i1) {
IBlockState iblockstate2 = parChunkPrimer.getBlockState(i, i1, j);
for (int l = 127; l >= 0; --l) {
IBlockState iblockstate2 = parChunkPrimer.getBlockState(i, l, j);
if (iblockstate2.getBlock().getMaterial() == Material.air) {
k = -1;
l = -1;
} else if (iblockstate2.getBlock() == Blocks.stone) {
if (k == -1) {
if (b0 <= 0) {
iblockstate = Blocks.air.getDefaultState();
iblockstate1 = Blocks.end_stone.getDefaultState();
if (l == -1) {
if (k <= 0) {
iblockstate = AIR;
iblockstate1 = END_STONE;
}
k = b0;
if (l >= 0) {
parChunkPrimer.setBlockState(i, l, j, iblockstate);
l = k;
if (i1 >= 0) {
parChunkPrimer.setBlockState(i, i1, j, iblockstate);
} else {
parChunkPrimer.setBlockState(i, l, j, iblockstate1);
parChunkPrimer.setBlockState(i, i1, j, iblockstate1);
}
} else if (k > 0) {
--k;
parChunkPrimer.setBlockState(i, l, j, iblockstate1);
} else if (l > 0) {
--l;
parChunkPrimer.setBlockState(i, i1, j, iblockstate1);
}
}
}
@ -173,14 +188,19 @@ public class ChunkProviderEnd implements IChunkProvider {
* MP client it will generates all the blocks for the specified
* chunk from the map seed and chunk seed
*/
public Chunk provideChunk(int i, int j) {
this.endRNG.setSeed((long) i * 341873128712L + (long) j * 132897987541L);
public Chunk provideChunk(int x, int z) {
this.rand.setSeed((long) x * 341873128712L + (long) z * 132897987541L);
ChunkPrimer chunkprimer = new ChunkPrimer();
this.biomesForGeneration = this.endWorld.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration,
i * 16, j * 16, 16, 16);
this.func_180520_a(i, j, chunkprimer);
this.biomesForGeneration = this.worldObj.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration,
x * 16, z * 16, 16, 16);
this.func_180520_a(x, z, chunkprimer);
this.func_180519_a(chunkprimer);
Chunk chunk = new Chunk(this.endWorld, chunkprimer, i, j);
if (this.mapFeaturesEnabled) {
// this.endCityGen.generate(this.worldObj, x, z, chunkprimer);
}
Chunk chunk = new Chunk(this.worldObj, chunkprimer, x, z);
byte[] abyte = chunk.getBiomeArray();
for (int k = 0; k < abyte.length; ++k) {
@ -195,38 +215,11 @@ public class ChunkProviderEnd implements IChunkProvider {
return this.provideChunk(parInt1, parInt2);
}
/**
* +
* generates a subset of the level's terrain data. Takes 7
* arguments: the [empty] noise array, the position, and the
* size.
*/
private double[] initializeNoiseField(double[] parArrayOfDouble, int parInt1, int parInt2, int parInt3, int parInt4,
int parInt5, int parInt6) {
if (parArrayOfDouble == null) {
parArrayOfDouble = new double[parInt4 * parInt5 * parInt6];
}
double d0 = 684.412D;
double d1 = 684.412D;
this.noiseData4 = this.noiseGen4.generateNoiseOctaves(this.noiseData4, parInt1, parInt3, parInt4, parInt6,
1.121D, 1.121D, 0.5D);
this.noiseData5 = this.noiseGen5.generateNoiseOctaves(this.noiseData5, parInt1, parInt3, parInt4, parInt6,
200.0D, 200.0D, 0.5D);
d0 = d0 * 2.0D;
this.noiseData1 = this.noiseGen3.generateNoiseOctaves(this.noiseData1, parInt1, parInt2, parInt3, parInt4,
parInt5, parInt6, d0 / 80.0D, d1 / 160.0D, d0 / 80.0D);
this.noiseData2 = this.noiseGen1.generateNoiseOctaves(this.noiseData2, parInt1, parInt2, parInt3, parInt4,
parInt5, parInt6, d0, d1, d0);
this.noiseData3 = this.noiseGen2.generateNoiseOctaves(this.noiseData3, parInt1, parInt2, parInt3, parInt4,
parInt5, parInt6, d0, d1, d0);
int i = 0;
for (int j = 0; j < parInt4; ++j) {
for (int k = 0; k < parInt6; ++k) {
float f = (float) (j + parInt1) / 1.0F;
float f1 = (float) (k + parInt3) / 1.0F;
private float getIslandHeightValue(int p_185960_1_, int p_185960_2_, int p_185960_3_, int p_185960_4_) {
float f = (float) (p_185960_1_ * 2 + p_185960_3_);
float f1 = (float) (p_185960_2_ * 2 + p_185960_4_);
float f2 = 100.0F - MathHelper.sqrt_float(f * f + f1 * f1) * 8.0F;
if (f2 > 80.0F) {
f2 = 80.0F;
}
@ -235,11 +228,77 @@ public class ChunkProviderEnd implements IChunkProvider {
f2 = -100.0F;
}
for (int l = 0; l < parInt5; ++l) {
for (int i = -12; i <= 12; ++i) {
for (int j = -12; j <= 12; ++j) {
long k = (long) (p_185960_1_ + i);
long l = (long) (p_185960_2_ + j);
if (k * k + l * l > 4096L
&& this.islandNoise.func_151605_a((double) k, (double) l) < -0.8999999761581421D) {
float f3 = (MathHelper.abs((float) k) * 3439.0F + MathHelper.abs((float) l) * 147.0F) % 13.0F
+ 9.0F;
f = (float) (p_185960_3_ - i * 2);
f1 = (float) (p_185960_4_ - j * 2);
float f4 = 100.0F - MathHelper.sqrt_float(f * f + f1 * f1) * f3;
if (f4 > 80.0F) {
f4 = 80.0F;
}
if (f4 < -100.0F) {
f4 = -100.0F;
}
if (f4 > f2) {
f2 = f4;
}
}
}
}
return f2;
}
public boolean isIslandChunk(int p_185961_1_, int p_185961_2_) {
return (long) p_185961_1_ * (long) p_185961_1_ + (long) p_185961_2_ * (long) p_185961_2_ > 4096L
&& this.getIslandHeightValue(p_185961_1_, p_185961_2_, 1, 1) >= 0.0F;
}
/**
* +
* generates a subset of the level's terrain data. Takes 7
* arguments: the [empty] noise array, the position, and the
* size.
*/
private double[] initializeNoiseField(double[] p_185963_1_, int p_185963_2_, int p_185963_3_, int p_185963_4_,
int p_185963_5_, int p_185963_6_, int p_185963_7_) {
if (p_185963_1_ == null) {
p_185963_1_ = new double[p_185963_5_ * p_185963_6_ * p_185963_7_];
}
double d0 = 684.412D;
double d1 = 684.412D;
d0 = d0 * 2.0D;
this.pnr = this.perlinNoise1.generateNoiseOctaves(this.pnr, p_185963_2_, p_185963_3_, p_185963_4_, p_185963_5_,
p_185963_6_, p_185963_7_, d0 / 80.0D, d1 / 160.0D, d0 / 80.0D);
this.ar = this.lperlinNoise1.generateNoiseOctaves(this.ar, p_185963_2_, p_185963_3_, p_185963_4_, p_185963_5_,
p_185963_6_, p_185963_7_, d0, d1, d0);
this.br = this.lperlinNoise2.generateNoiseOctaves(this.br, p_185963_2_, p_185963_3_, p_185963_4_, p_185963_5_,
p_185963_6_, p_185963_7_, d0, d1, d0);
int i = p_185963_2_ / 2;
int j = p_185963_4_ / 2;
int k = 0;
for (int l = 0; l < p_185963_5_; ++l) {
for (int i1 = 0; i1 < p_185963_7_; ++i1) {
float f = this.getIslandHeightValue(i, j, l, i1);
for (int j1 = 0; j1 < p_185963_6_; ++j1) {
double d2 = 0.0D;
double d3 = this.noiseData2[i] / 512.0D;
double d4 = this.noiseData3[i] / 512.0D;
double d5 = (this.noiseData1[i] / 10.0D + 1.0D) / 2.0D;
double d3 = this.ar[k] / 512.0D;
double d4 = this.br[k] / 512.0D;
double d5 = (this.pnr[k] / 10.0D + 1.0D) / 2.0D;
if (d5 < 0.0D) {
d2 = d3;
} else if (d5 > 1.0D) {
@ -249,27 +308,29 @@ public class ChunkProviderEnd implements IChunkProvider {
}
d2 = d2 - 8.0D;
d2 = d2 + (double) f2;
byte b0 = 2;
if (l > parInt5 / 2 - b0) {
double d6 = (double) ((float) (l - (parInt5 / 2 - b0)) / 64.0F);
d2 = d2 + (double) f;
int k1 = 2;
if (j1 > p_185963_6_ / 2 - k1) {
double d6 = (double) ((float) (j1 - (p_185963_6_ / 2 - k1)) / 64.0F);
d6 = MathHelper.clamp_double(d6, 0.0D, 1.0D);
d2 = d2 * (1.0D - d6) + -3000.0D * d6;
}
b0 = 8;
if (l < b0) {
double d7 = (double) ((float) (b0 - l) / ((float) b0 - 1.0F));
k1 = 8;
if (j1 < k1) {
double d7 = (double) ((float) (k1 - j1) / ((float) k1 - 1.0F));
d2 = d2 * (1.0D - d7) + -30.0D * d7;
}
parArrayOfDouble[i] = d2;
++i;
p_185963_1_[k] = d2;
++k;
}
}
}
return parArrayOfDouble;
return p_185963_1_;
}
/**
@ -284,11 +345,55 @@ public class ChunkProviderEnd implements IChunkProvider {
* +
* Populates chunk with ores etc etc
*/
public void populate(IChunkProvider var1, int i, int j) {
public void populate(IChunkProvider var1, int x, int z) {
BlockFalling.fallInstantly = true;
BlockPos blockpos = new BlockPos(i * 16, 0, j * 16);
this.endWorld.getBiomeGenForCoords(blockpos.add(16, 0, 16)).decorate(this.endWorld, this.endWorld.rand,
blockpos);
BlockPos blockpos = new BlockPos(x * 16, 0, z * 16);
if (this.mapFeaturesEnabled)
{
// this.endCityGen.generateStructure(this.worldObj, this.rand, new ChunkPos(x, z));
}
this.worldObj.getBiomeGenForCoords(blockpos.add(16, 0, 16)).decorate(this.worldObj, this.worldObj.rand, blockpos);
long i = (long)x * (long)x + (long)z * (long)z;
if (i > 4096L)
{
float f = this.getIslandHeightValue(x, z, 1, 1);
if (f < -20.0F && this.rand.nextInt(14) == 0)
{
this.endIslands.generate(this.worldObj, this.rand, blockpos.add(this.rand.nextInt(16) + 8, 55 + this.rand.nextInt(16), this.rand.nextInt(16) + 8));
if (this.rand.nextInt(4) == 0)
{
this.endIslands.generate(this.worldObj, this.rand, blockpos.add(this.rand.nextInt(16) + 8, 55 + this.rand.nextInt(16), this.rand.nextInt(16) + 8));
}
}
if (this.getIslandHeightValue(x, z, 1, 1) > 40.0F)
{
int j = this.rand.nextInt(5);
for (int k = 0; k < j; ++k)
{
int l = this.rand.nextInt(16) + 8;
int i1 = this.rand.nextInt(16) + 8;
int j1 = this.worldObj.getHeight(blockpos.add(l, 0, i1)).getY();
if (j1 > 0)
{
int k1 = j1 - 1;
if (this.worldObj.isAirBlock(blockpos.add(l, k1 + 1, i1)) && this.worldObj.getBlockState(blockpos.add(l, k1, i1)).getBlock() == Blocks.end_stone)
{
BlockChorusFlower.generatePlant(this.worldObj, blockpos.add(l, k1 + 1, i1), this.rand, 8);
}
}
}
}
}
BlockFalling.fallInstantly = false;
}
@ -342,7 +447,7 @@ public class ChunkProviderEnd implements IChunkProvider {
public List<BiomeGenBase.SpawnListEntry> getPossibleCreatures(EnumCreatureType enumcreaturetype,
BlockPos blockpos) {
return this.endWorld.getBiomeGenForCoords(blockpos).getSpawnableList(enumcreaturetype);
return this.worldObj.getBiomeGenForCoords(blockpos).getSpawnableList(enumcreaturetype);
}
public BlockPos getStrongholdGen(World var1, String var2, BlockPos var3) {

View File

@ -0,0 +1,33 @@
package net.minecraft.world.gen.feature;
import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom;
import net.minecraft.init.Blocks;
import net.minecraft.util.BlockPos;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
public class WorldGenEndIsland extends WorldGenerator
{
public boolean generate(World worldIn, EaglercraftRandom rand, BlockPos position)
{
float f = (float)(rand.nextInt(3) + 4);
for (int i = 0; f > 0.5F; --i)
{
for (int j = MathHelper.floor_float(-f); j <= MathHelper.ceiling_float_int(f); ++j)
{
for (int k = MathHelper.floor_float(-f); k <= MathHelper.ceiling_float_int(f); ++k)
{
if ((float)(j * j + k * k) <= (f + 1.0F) * (f + 1.0F))
{
this.setBlockAndNotifyAdequately(worldIn, position.add(j, i, k), Blocks.end_stone.getDefaultState());
}
}
}
f = (float)((double)f - ((double)rand.nextInt(2) + 0.5D));
}
return true;
}
}

View File

@ -61,6 +61,15 @@ public class PlatformAssets {
}
}
public static List<String> listFilesAtPath(String path) {
List<String> ret = new ArrayList<>();
File f = new File("resources", path);
if(f.isDirectory()) {
listFilesAtPath(f, ret, path);
}
return ret;
}
public static ImageData loadImageFile(InputStream data) {
return loadImageFile(data, "image/png");
}

View File

@ -314,6 +314,8 @@ public class PlatformRuntime {
GLES30.glEnable(KHRDebug.GL_DEBUG_OUTPUT_KHR);
GLES30.glEnable(KHRDebug.GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR);
ServerAssets.initialize();
logger.info("Initializing Audio...");
PlatformAudio.platformInitialize();

View File

@ -0,0 +1,53 @@
package net.hoosiertransfer;
import java.util.HashMap;
import java.util.Map;
import java.util.List;
import java.util.ArrayList;
import java.io.InputStream;
import java.io.ByteArrayInputStream;
import net.lax1dude.eaglercraft.v1_8.internal.PlatformAssets;
import net.lax1dude.eaglercraft.v1_8.log4j.LogManager;
import net.lax1dude.eaglercraft.v1_8.log4j.Logger;
import net.lax1dude.eaglercraft.v1_8.sp.SingleplayerServerController;
import net.lax1dude.eaglercraft.v1_8.sp.ipc.IPCPacket1DUploadServerAsset;
public class ServerAssets {
public static final Logger logger = LogManager.getLogger("ServerAssets");
private static Map<String,byte[]> serverAssets = new HashMap<>();
private static List<String> filenamesForClient = new ArrayList<>();
// ! I might want to call initialize when the server starts up instead of when the client starts up
public static void initialize() {
filenamesForClient = PlatformAssets.listFilesAtPath("assets/minecraft/server");
}
public static void sendAssetsToServer() {
for (String path : filenamesForClient) {
byte[] data = PlatformAssets.getResourceBytes(path);
if (data != null) {
logger.info("Uploading asset: " + path);
SingleplayerServerController.sendIPCPacket(new IPCPacket1DUploadServerAsset(path, data));
}
}
}
public static void uploadAsset(String path, byte[] data) {
serverAssets.put(path, data);
logger.info("Uploaded asset: " + path);
}
public static byte[] getAssetBytes(String path) {
return serverAssets.get(path);
}
public static InputStream getAssetStream(String path) {
byte[] data = serverAssets.get(path);
if (data != null) {
return new ByteArrayInputStream(data);
} else {
return null;
}
}
}

View File

@ -13,6 +13,7 @@ import java.util.List;
import java.util.function.Consumer;
import net.hoosiertransfer.EaglerLUpdateThread;
import net.hoosiertransfer.ServerAssets;
import net.lax1dude.eaglercraft.v1_8.internal.EaglerMissingResourceException;
import net.lax1dude.eaglercraft.v1_8.internal.EnumPlatformANGLE;
import net.lax1dude.eaglercraft.v1_8.internal.EnumPlatformAgent;

View File

@ -13,6 +13,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformWebRTC;
import org.apache.commons.lang3.StringUtils;
import net.hoosiertransfer.ServerAssets;
import net.lax1dude.eaglercraft.v1_8.EagRuntime;
import net.lax1dude.eaglercraft.v1_8.internal.EnumEaglerConnectionState;
import net.lax1dude.eaglercraft.v1_8.internal.IPCPacketData;
@ -314,6 +315,7 @@ public class SingleplayerServerController implements ISaveFormat {
switch(pkt.ack) {
case 0xFF:
logger.info("Integrated server signaled a successful boot");
ServerAssets.sendAssetsToServer();
sendIPCPacket(new IPCPacket14StringList(IPCPacket14StringList.LOCALE, StringTranslate.dump()));
statusState = IntegratedServerState.WORLD_NONE;
break;

View File

@ -0,0 +1,61 @@
package net.lax1dude.eaglercraft.v1_8.sp.ipc;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
/**
* Copyright (c) 2023-2024 lax1dude. All Rights Reserved.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*/
public class IPCPacket1DUploadServerAsset implements IPCPacketBase {
public static final int ID = 0x1D;
public String path;
public byte[] data;
public IPCPacket1DUploadServerAsset() {
}
public IPCPacket1DUploadServerAsset(String path, byte[] data) {
this.path = path;
this.data = data;
}
@Override
public void deserialize(DataInput bin) throws IOException {
path = bin.readUTF();
data = new byte[bin.readInt()];
bin.readFully(data);
}
@Override
public void serialize(DataOutput bin) throws IOException {
bin.writeUTF(path);
bin.writeInt(data.length);
bin.write(data);
}
@Override
public int id() {
return ID;
}
@Override
public int size() {
return IPCPacketBase.strLen(path) + 4 + data.length;
}
}

View File

@ -58,6 +58,7 @@ public class IPCPacketManager {
mappings.put(IPCPacket1ALoggerMessage.ID, IPCPacket1ALoggerMessage::new);
mappings.put(IPCPacket1BEnableLogging.ID, IPCPacket1BEnableLogging::new);
mappings.put(IPCPacket1CIssueDetected.ID, IPCPacket1CIssueDetected::new);
mappings.put(IPCPacket1DUploadServerAsset.ID, IPCPacket1DUploadServerAsset::new);
mappings.put(IPCPacketFFProcessKeepAlive.ID, IPCPacketFFProcessKeepAlive::new);
}

View File

@ -9,6 +9,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import net.hoosiertransfer.ServerAssets;
import net.lax1dude.eaglercraft.v1_8.EagRuntime;
import net.lax1dude.eaglercraft.v1_8.EagUtils;
import net.lax1dude.eaglercraft.v1_8.internal.IPCPacketData;
@ -395,6 +396,16 @@ public class EaglerIntegratedServerWorker {
enableLoggingRedirector(((IPCPacket1BEnableLogging)ipc).enable);
break;
}
case IPCPacket1DUploadServerAsset.ID: {
IPCPacket1DUploadServerAsset pkt = (IPCPacket1DUploadServerAsset)ipc;
if(!isServerStopped()) {
ServerAssets.uploadAsset(pkt.path, pkt.data);
}else {
logger.error("Client tried to upload asset while server was stopped");
sendTaskFailed();
}
break;
}
default:
logger.error("IPC packet type 0x{} class \"{}\" was not handled", Integer.toHexString(id), ipc.getClass().getSimpleName());
sendTaskFailed();

View File

@ -6,6 +6,7 @@ import java.util.List;
import com.google.common.collect.Lists;
import net.hoosiertransfer.ServerAssets;
import net.lax1dude.eaglercraft.v1_8.EagRuntime;
import net.lax1dude.eaglercraft.v1_8.internal.vfs2.VFile2;
import net.lax1dude.eaglercraft.v1_8.log4j.Logger;

View File

@ -3,6 +3,8 @@ package net.lax1dude.eaglercraft.v1_8.internal;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.List;
import java.util.ArrayList;
import org.teavm.interop.Async;
import org.teavm.interop.AsyncCallback;
@ -91,6 +93,16 @@ public class PlatformAssets {
}
}
public static List<String> listFilesAtPath(String path) {
List<String> ret = new ArrayList<>();
for(String s : assets.keySet()) {
if(s.startsWith(path)) {
ret.add(s);
}
}
return ret;
}
public static ImageData loadImageFile(InputStream data) {
return loadImageFile(data, "image/png");
}

View File

@ -11,6 +11,7 @@ import java.util.List;
import java.util.Set;
import java.util.function.Consumer;
import net.hoosiertransfer.ServerAssets;
import net.lax1dude.eaglercraft.v1_8.EagRuntime;
import net.lax1dude.eaglercraft.v1_8.EagUtils;
import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID;
@ -444,6 +445,8 @@ public class PlatformRuntime {
logger.info("Loaded {} resources from EPKs", PlatformAssets.assets.size());
ServerAssets.initialize();
if(allowBootMenu && BootMenuEntryPoint.checkShouldLaunchFlag(win)) {
logger.info("Boot menu enable flag is set, entering boot menu...");
enterBootMenu();