feat: partial force torch implementation

This commit is contained in:
LordMZTE 2024-04-23 17:31:46 +02:00
parent e84e9c0b53
commit ae1cde18db
Signed by: LordMZTE
GPG Key ID: B64802DC33A64FF6
40 changed files with 1909 additions and 147 deletions

View File

@ -12,7 +12,9 @@ public class Config {
public static boolean easyWing;
public static boolean timeUpgradeRod;
public static boolean timeUpgradeSword;
public static boolean timeUpgradeTorch;
public static boolean timeUpgradeTorch = true;
public static boolean timeAffectBlocks = true;
public static boolean timeAffectTiles = true;
public static boolean insaneImpervious;
public static int speedLevel;
@ -21,8 +23,6 @@ public class Config {
public static float gemValue = 0.25F;
public static int powerOreRenderID;
public static File engineFile;
public static boolean disableRodSpeed;
public static boolean disableRodHeal;
@ -35,6 +35,9 @@ public class Config {
public static int powerOreRarity = 8;
public static int powerOreSpawnHeight = 48;
public static int torchDist = 42;
public static int torchFreq = 42;
private static void generateDefaultEngineFile() {
try {
FileWriter e = new FileWriter(engineFile);

View File

@ -11,11 +11,18 @@ import cpw.mods.fml.common.registry.EntityRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import ley.modding.dartcraft.block.DartBlocks;
import ley.modding.dartcraft.entity.*;
import ley.modding.dartcraft.entity.EntityBottle;
import ley.modding.dartcraft.entity.EntityColdChicken;
import ley.modding.dartcraft.entity.EntityColdCow;
import ley.modding.dartcraft.entity.EntityColdPig;
import ley.modding.dartcraft.entity.EntityFlyingFlask;
import ley.modding.dartcraft.entity.EntityFrozenItem;
import ley.modding.dartcraft.entity.EntityTime;
import ley.modding.dartcraft.event.EventHandler;
import ley.modding.dartcraft.internal.Registry;
import ley.modding.dartcraft.item.DartItems;
import ley.modding.dartcraft.network.PacketClipButton;
import ley.modding.dartcraft.network.PacketFX;
import ley.modding.dartcraft.proxy.CommonProxy;
import ley.modding.dartcraft.tab.DartcraftTab;
import ley.modding.dartcraft.util.ForceEngineLiquids;
@ -48,9 +55,13 @@ public class Dartcraft {
@Mod.EventHandler
public void preInit(FMLPreInitializationEvent e) {
MinecraftForge.EVENT_BUS.register(new EventHandler());
channel = NetworkRegistry.INSTANCE.newSimpleChannel("Dartcraft");
channel = NetworkRegistry.INSTANCE.newSimpleChannel("dartcraft");
int desc = 0;
channel.registerMessage(
PacketClipButton.Handler.class, PacketClipButton.class, 0, Side.SERVER
PacketClipButton.Handler.class, PacketClipButton.class, desc++, Side.SERVER
);
channel.registerMessage(
PacketFX.Handler.class, PacketFX.class, desc++, Side.CLIENT
);
FortunesUtil.load();
}
@ -99,6 +110,18 @@ public class Dartcraft {
1,
true
);
EntityRegistry.registerModEntity(
EntityTime.class, "entityTime", entityId++, Dartcraft.instance, 40, 1, true
);
EntityRegistry.registerModEntity(
EntityFrozenItem.class,
"entityFrozenItem",
entityId++,
Dartcraft.instance,
40,
1,
true
);
}
@Mod.EventHandler

View File

@ -0,0 +1,297 @@
package ley.modding.dartcraft.block;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Random;
import java.util.stream.IntStream;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import ley.modding.dartcraft.Config;
import ley.modding.dartcraft.Dartcraft;
import ley.modding.dartcraft.client.renderer.block.RenderBlockTorch;
import ley.modding.dartcraft.item.AbstractItemBlockMetadata;
import ley.modding.dartcraft.tile.TileEntityForceTorch;
import ley.modding.dartcraft.util.DartUtils;
import ley.modding.dartcraft.util.Util;
import ley.modding.tileralib.api.ICustomItemBlockProvider;
import ley.modding.tileralib.api.ITEProvider;
import net.minecraft.block.Block;
import net.minecraft.block.BlockTorch;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockForceTorch
extends BlockTorch implements ITEProvider, ICustomItemBlockProvider {
public static final String ID = "forcetorch";
public static HashMap<String, int[]> upgrades = new HashMap<>();
static {
upgrades.put("Heat", new int[] { 16, 1 });
upgrades.put("Healing", new int[] { 17, 6 });
upgrades.put("Bane", new int[] { 18, 14 });
upgrades.put("Camo", new int[] { 19, 0 });
upgrades.put("Repair", new int[] { 20, 4 });
upgrades.put("Time", new int[] { 21, 12 });
}
public IIcon[] icons;
public BlockForceTorch() {
super();
Util.configureBlock(this, ID);
this.setResistance(2000.0F);
this.setLightLevel(1.0F);
}
@Override
public int getRenderType() {
return RenderBlockTorch.RI;
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
@Override
public int getLightValue(IBlockAccess world, int x, int y, int z) {
return 15;
}
@Override
public boolean hasTileEntity(int meta) {
return true;
}
@Override
public TileEntity createTileEntity(World world, int meta) {
return new TileEntityForceTorch();
}
@Override
public void onBlockPlacedBy(
World world, int x, int y, int z, EntityLivingBase entity, ItemStack stack
) {
super.onBlockPlacedBy(world, x, y, z, entity, stack);
NBTTagCompound upgrades = new NBTTagCompound();
int color = stack.getItemDamage();
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof TileEntityForceTorch) {
try {
for (String name : BlockForceTorch.upgrades.keySet()) {
int[] ints = (int[]) BlockForceTorch.upgrades.get(name);
if (stack.getItemDamage() == ints[0]) {
color = ints[1];
upgrades.setInteger(name, 1);
break;
}
}
} catch (Exception var13) {}
TileEntityForceTorch torch1 = (TileEntityForceTorch) tile;
torch1.upgrades = upgrades;
torch1.color = (byte) color;
}
}
@Override
public void breakBlock(World world, int x, int y, int z, Block par5, int meta) {
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof TileEntityForceTorch) {
TileEntityForceTorch torch = (TileEntityForceTorch) tile;
ItemStack stack = new ItemStack(this, 1, torch.color);
if (torch.upgrades != null && !torch.upgrades.hasNoTags()) {
try {
int e = -1;
for (String key : BlockForceTorch.upgrades.keySet()) {
if (torch.upgrades.hasKey(key)) {
e = ((int[]) upgrades.get(key))[0];
break;
}
}
if (e > 0) {
stack.setItemDamage(e);
}
} catch (Exception var13) {}
}
DartUtils.dropItem(stack, world, (double) x, (double) y, (double) z);
world.removeTileEntity(x, y, z);
}
}
@Override
public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis) {
return false;
}
@Override
public ArrayList<ItemStack>
getDrops(World alec0, int alec1, int alec2, int alec3, int alec4, int alec5) {
return new ArrayList<>();
}
public IIcon getIconForColor(int color) {
switch (color) {
case 16: // heat -> red
return this.icons[1];
case 17: // healing -> cyan
return this.icons[6];
case 18: // bane -> orange
return this.icons[14];
case 19: // camo -> black
return this.icons[0];
case 20: // aspect -> blue
return this.icons[4];
case 21: // time -> light blue
return this.icons[12];
default:
return color >= 0 && color < this.icons.length ? this.icons[color]
: this.blockIcon;
}
}
@Override
public IIcon getIcon(int alec, int meta) {
return this.getIconForColor(meta);
}
@Override
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) {
try {
return this.getIconForColor(
((TileEntityForceTorch) world.getTileEntity(x, y, z)).color
);
} catch (Exception var7) {
return this.blockIcon;
}
}
@Override
@SideOnly(Side.CLIENT)
@SuppressWarnings({ "rawtypes", "unchecked" })
public void getSubBlocks(Item id, CreativeTabs tab, List list) {
IntStream.range(0, Config.timeUpgradeTorch ? 22 : 21)
.mapToObj(m -> new ItemStack(this, 1, m))
.forEach(list::add);
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister reggie) {
this.icons = IntStream.range(0, 16)
.mapToObj(i -> "dartcraft:forcetorch" + i)
.map(reggie::registerIcon)
.toArray(IIcon[] ::new);
this.blockIcon = this.icons[0];
}
@Override
public void randomDisplayTick(World world, int x, int y, int z, Random rand) {
try {
TileEntityForceTorch e = (TileEntityForceTorch) world.getTileEntity(x, y, z);
if (e.upgrades.hasKey("Camo")) {
return;
}
} catch (Exception var7) {}
super.randomDisplayTick(world, x, y, z, rand);
}
@Override
public boolean onBlockActivated(
World world,
int x,
int y,
int z,
EntityPlayer player,
int par6,
float par7,
float par8,
float par9
) {
try {
TileEntity e = world.getTileEntity(x, y, z);
if (e != null && e instanceof TileEntityForceTorch) {
TileEntityForceTorch torch = (TileEntityForceTorch) e;
if (torch.upgrades.hasKey("Time") && Config.timeUpgradeTorch) {
if (Dartcraft.proxy.isSimulating(world)) {
++torch.timeType;
if (torch.timeType > 4) {
torch.timeType = 0;
}
String message = "Time mode: ";
switch (torch.timeType) {
case 0:
default:
message = message + "None";
break;
case 1:
message = message + "Stop";
break;
case 2:
message = message + "Slow";
break;
case 3:
message = message + "Fast";
break;
case 4:
message = message + "Hyper";
}
Dartcraft.proxy.sendChatToPlayer(player, message);
}
return true;
}
}
} catch (Exception var13) {
var13.printStackTrace();
}
return false;
}
@Override
public Class<? extends TileEntity> getTEClass() {
return TileEntityForceTorch.class;
}
@Override
public Class<? extends ItemBlock> getItemBlockClass() {
return BlockItem.class;
}
public static class BlockItem extends AbstractItemBlockMetadata {
public BlockItem(Block block) {
super(block);
}
@Override
public String getID() {
return ID;
}
}
}

View File

@ -4,8 +4,8 @@ import java.util.List;
import java.util.Random;
import java.util.stream.IntStream;
import ley.modding.dartcraft.Config;
import ley.modding.dartcraft.Dartcraft;
import ley.modding.dartcraft.client.renderer.block.RenderBlockPowerOre;
import ley.modding.dartcraft.item.AbstractItemBlockMetadata;
import ley.modding.dartcraft.item.DartItems;
import ley.modding.dartcraft.util.Util;
@ -60,7 +60,7 @@ public class BlockPowerOre extends BaseBlock implements ICustomItemBlockProvider
@Override
public int getRenderType() {
return Config.powerOreRenderID;
return RenderBlockPowerOre.RI;
}
@Override

View File

@ -16,6 +16,7 @@ public class DartBlocks {
public static Block forcesapling;
public static Block[] forceslab;
public static Block[] forcestairs;
public static Block forcetorch;
public static Block liquidforce;
public static Block powerore;
@ -43,6 +44,7 @@ public class DartBlocks {
.mapToObj(BlockForceStairs::new)
.map(reg::registerBlock)
.toArray(Block[] ::new);
DartBlocks.forcetorch = reg.registerBlock(new BlockForceTorch());
DartBlocks.liquidforce = reg.registerBlock(new BlockLiquidForce());
DartBlocks.powerore = reg.registerBlock(new BlockPowerOre());
}

View File

@ -6,8 +6,10 @@ import org.lwjgl.opengl.GL11;
import ley.modding.dartcraft.Dartcraft;
import ley.modding.dartcraft.proxy.CommonProxy;
import net.minecraft.client.Minecraft;
import net.minecraft.client.particle.EntityFX;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
public class FXDisney extends EntityFX {
@ -154,7 +156,9 @@ public class FXDisney extends EntityFX {
GL11.glDisable(3042);
GL11.glDepthMask(true);
GL11.glPopMatrix();
Dartcraft.proxy.bindTexture("textures/particle/particles.png");
Minecraft.getMinecraft().getTextureManager().bindTexture(
new ResourceLocation("textures/particle/particles.png")
);
tessy.startDrawingQuads();
}
}

View File

@ -0,0 +1,176 @@
package ley.modding.dartcraft.client.fx;
import java.awt.Color;
import org.lwjgl.opengl.GL11;
import ley.modding.dartcraft.Dartcraft;
import ley.modding.dartcraft.proxy.CommonProxy;
import net.minecraft.client.Minecraft;
import net.minecraft.client.particle.EntityFX;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
public class FXTime extends EntityFX {
public static final int TYPE_FALL = 0;
public static final int TYPE_CHANGE = 1;
public static final int TYPE_BREAK = 2;
public static final int TYPE_FREEZE = 3;
public static final int TYPE_FREEZE_ENTITY = 4;
private int iconIndex = 22;
private int type;
private Color color;
public FXTime(
World world, double x, double y, double z, double vx, double vy, double vz
) {
super(world, x, y, z, vx, vy, vz);
}
public FXTime(World world, double x, double y, double z, int type) {
super(world, x, y, z);
this.color = new Color(3574754);
this.particleRed = (float) this.color.getRed();
this.particleGreen = (float) this.color.getGreen();
this.particleBlue = (float) this.color.getBlue();
this.setSize(0.02F, 0.02F);
this.noClip = true;
this.type = type;
float velModifier;
switch (type) {
case 0:
this.motionX = this.motionZ = 0.0D;
this.motionY = -0.025D;
this.particleMaxAge = (int) (85.0D
* ((double) world.rand.nextFloat() * 0.2D
+ 0.8999999761581421D));
break;
case 1:
velModifier = 0.15F;
this.motionX = (double) ((CommonProxy.rand.nextFloat() * 2.0F - 1.0F)
* velModifier);
this.motionY = (double) ((CommonProxy.rand.nextFloat() * 2.0F - 1.0F)
* velModifier);
this.motionZ = (double) ((CommonProxy.rand.nextFloat() * 2.0F - 1.0F)
* velModifier);
this.particleMaxAge = (int) (15.0D
* ((double) world.rand.nextFloat() * 0.2D
+ 0.8999999761581421D));
break;
case 2:
velModifier = 0.1F;
this.motionX = (double) ((CommonProxy.rand.nextFloat() * 2.0F - 1.0F)
* velModifier);
this.motionY = (double) velModifier;
this.motionZ = (double) ((CommonProxy.rand.nextFloat() * 2.0F - 1.0F)
* velModifier);
this.particleMaxAge = (int) (15.0D
* ((double) world.rand.nextFloat() * 0.2D
+ 0.8999999761581421D));
this.particleGravity = 0.5F;
break;
case 4:
this.particleAlpha = 0.5F;
case 3:
velModifier = 0.01F;
this.motionX = (double) ((CommonProxy.rand.nextFloat() * 2.0F - 1.0F)
* velModifier);
this.motionY = (double) velModifier;
this.motionZ = (double) ((CommonProxy.rand.nextFloat() * 2.0F - 1.0F)
* velModifier);
this.particleMaxAge = (int) (15.0D
* ((double) world.rand.nextFloat() * 0.2D
+ 0.8999999761581421D));
this.particleGravity = 0.0F;
}
this.particleMaxAge = (int) ((float) this.particleMaxAge * 2.0F);
this.particleScale *= 1.25F;
this.particleGravity *= 0.5F;
this.particleAlpha *= 0.3F;
}
public void onUpdate() {
super.onUpdate();
this.rotationPitch += 0.01F;
switch (this.type) {
case 3:
if (this.particleAge > this.particleMaxAge / 2) {
this.particleAlpha -= 0.075F;
}
default:
}
}
public void renderParticle(
Tessellator tessy,
float par2,
float par3,
float par4,
float par5,
float par6,
float par7
) {
tessy.draw();
GL11.glPushMatrix();
GL11.glDepthMask(false);
GL11.glEnable(3042);
GL11.glBlendFunc(770, 1);
Dartcraft.proxy.bindTexture("darticles.png");
GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.75F);
float var8 = (float) (this.iconIndex % 8) / 8.0F;
float var9 = var8 + 0.124875F;
float var10 = (float) (this.iconIndex / 8) / 8.0F;
float var11 = var10 + 0.124875F;
float var12 = 0.1F * this.particleScale;
float var13 = (float) (this.prevPosX + (this.posX - this.prevPosX) * (double) par2
- interpPosX);
float var14 = (float) (this.prevPosY + (this.posY - this.prevPosY) * (double) par2
- interpPosY);
float var15 = (float) (this.prevPosZ + (this.posZ - this.prevPosZ) * (double) par2
- interpPosZ);
tessy.startDrawingQuads();
tessy.setBrightness(240);
tessy.setColorRGBA_F(
this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha
);
tessy.addVertexWithUV(
(double) (var13 - par3 * var12 - par6 * var12),
(double) (var14 - par4 * var12),
(double) (var15 - par5 * var12 - par7 * var12),
(double) var9,
(double) var11
);
tessy.addVertexWithUV(
(double) (var13 - par3 * var12 + par6 * var12),
(double) (var14 + par4 * var12),
(double) (var15 - par5 * var12 + par7 * var12),
(double) var9,
(double) var10
);
tessy.addVertexWithUV(
(double) (var13 + par3 * var12 + par6 * var12),
(double) (var14 + par4 * var12),
(double) (var15 + par5 * var12 + par7 * var12),
(double) var8,
(double) var10
);
tessy.addVertexWithUV(
(double) (var13 + par3 * var12 - par6 * var12),
(double) (var14 - par4 * var12),
(double) (var15 + par5 * var12 - par7 * var12),
(double) var8,
(double) var11
);
tessy.draw();
GL11.glDisable(3042);
GL11.glDepthMask(true);
GL11.glPopMatrix();
Minecraft.getMinecraft().getTextureManager().bindTexture(
new ResourceLocation("textures/particle/particles.png")
);
tessy.startDrawingQuads();
}
}

View File

@ -1,7 +1,6 @@
package ley.modding.dartcraft.client.gui;
import ley.modding.dartcraft.Dartcraft;
import ley.modding.dartcraft.network.DartPacket;
import ley.modding.dartcraft.network.PacketClipButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.inventory.GuiContainer;
@ -69,22 +68,19 @@ public class GuiClipboard extends GuiContainer {
if (this.balanceBounds.contains(pos)) {
getClass();
this.balanceRender = 8;
Dartcraft.proxy.sendPacketToServer((DartPacket
) new PacketClipButton((EntityPlayer) ((GuiScreen) this).mc.thePlayer, 0));
Dartcraft.channel.sendToServer(new PacketClipButton(0));
this.container.balanceItems();
}
if (this.distBounds.contains(pos)) {
getClass();
this.distRender = 8;
Dartcraft.proxy.sendPacketToServer((DartPacket
) new PacketClipButton((EntityPlayer) ((GuiScreen) this).mc.thePlayer, 1));
Dartcraft.channel.sendToServer(new PacketClipButton(1));
this.container.doDistribute();
}
if (this.clearBounds.contains(pos)) {
getClass();
this.clearRender = 8;
Dartcraft.proxy.sendPacketToServer((DartPacket
) new PacketClipButton((EntityPlayer) ((GuiScreen) this).mc.thePlayer, 2));
Dartcraft.channel.sendToServer(new PacketClipButton(2));
this.container.clearMatrix();
}
}

View File

@ -1,7 +1,6 @@
package ley.modding.dartcraft.client.renderer.block;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import ley.modding.dartcraft.Config;
import ley.modding.dartcraft.block.BlockPowerOre;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
@ -11,8 +10,10 @@ import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import org.lwjgl.opengl.GL11;
public class PowerOreRenderer
public class RenderBlockPowerOre
extends BlockRenderer implements ISimpleBlockRenderingHandler {
public static int RI;
public void
renderInventoryBlock(Block block, int meta, int modelID, RenderBlocks renderer) {
block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
@ -66,6 +67,6 @@ public class PowerOreRenderer
@Override
public int getRenderId() {
return Config.powerOreRenderID;
return RI;
}
}

View File

@ -0,0 +1,181 @@
package ley.modding.dartcraft.client.renderer.block;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import ley.modding.dartcraft.block.BlockForceTorch;
import ley.modding.dartcraft.block.DartBlocks;
import ley.modding.dartcraft.tile.TileEntityForceTorch;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.WorldClient;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
public class RenderBlockTorch
extends BlockRenderer implements ISimpleBlockRenderingHandler {
public static int RI;
public boolean renderBlockTorch(Block block, int x, int y, int z) {
IIcon[] torchIcons = ((BlockForceTorch) DartBlocks.forcetorch).icons;
WorldClient world = null;
IIcon icon = null;
try {
world = Minecraft.getMinecraft().theWorld;
TileEntityForceTorch l = (TileEntityForceTorch) world.getTileEntity(x, y, z);
icon = torchIcons[l.color];
if (l.upgrades.hasKey("Camo")) {
return false;
}
if (l.upgrades.hasKey("Heat")) {
icon = torchIcons[1];
}
if (l.upgrades.hasKey("Healing")) {
icon = torchIcons[6];
}
if (l.upgrades.hasKey("Bane")) {
icon = torchIcons[14];
}
} catch (Exception var15) {}
if (world != null && icon != null) {
int l1 = world.getBlockMetadata(x, y, z);
Tessellator tessellator = Tessellator.instance;
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
double d0 = 0.4000000059604645D;
double d1 = 0.5D - d0;
double d2 = 0.20000000298023224D;
if (l1 == 1) {
this.renderTorchAtAngle(
icon, (double) x - d1, (double) y + d2, (double) z, -d0, 0.0D, 0
);
} else if (l1 == 2) {
this.renderTorchAtAngle(
icon, (double) x + d1, (double) y + d2, (double) z, d0, 0.0D, 0
);
} else if (l1 == 3) {
this.renderTorchAtAngle(
icon, (double) x, (double) y + d2, (double) z - d1, 0.0D, -d0, 0
);
} else if (l1 == 4) {
this.renderTorchAtAngle(
icon, (double) x, (double) y + d2, (double) z + d1, 0.0D, d0, 0
);
} else {
this.renderTorchAtAngle(
icon, (double) x, (double) y, (double) z, 0.0D, 0.0D, 0
);
}
return true;
} else {
return false;
}
}
public void renderTorchAtAngle(
IIcon icon, double x, double y, double z, double par8, double par10, int par12
) {
Tessellator tessellator = Tessellator.instance;
double d5 = (double) icon.getMinU();
double d6 = (double) icon.getMinV();
double d7 = (double) icon.getMaxU();
double d8 = (double) icon.getMaxV();
double d9 = (double) icon.getInterpolatedU(7.0D);
double d10 = (double) icon.getInterpolatedV(6.0D);
double d11 = (double) icon.getInterpolatedU(9.0D);
double d12 = (double) icon.getInterpolatedV(8.0D);
double d13 = (double) icon.getInterpolatedU(7.0D);
double d14 = (double) icon.getInterpolatedV(13.0D);
double d15 = (double) icon.getInterpolatedU(9.0D);
double d16 = (double) icon.getInterpolatedV(15.0D);
x += 0.5D;
z += 0.5D;
double d17 = x - 0.5D;
double d18 = x + 0.5D;
double d19 = z - 0.5D;
double d20 = z + 0.5D;
double d21 = 0.0625D;
double d22 = 0.625D;
tessellator.addVertexWithUV(
x + par8 * (1.0D - d22) - d21,
y + d22,
z + par10 * (1.0D - d22) - d21,
d9,
d10
);
tessellator.addVertexWithUV(
x + par8 * (1.0D - d22) - d21,
y + d22,
z + par10 * (1.0D - d22) + d21,
d9,
d12
);
tessellator.addVertexWithUV(
x + par8 * (1.0D - d22) + d21,
y + d22,
z + par10 * (1.0D - d22) + d21,
d11,
d12
);
tessellator.addVertexWithUV(
x + par8 * (1.0D - d22) + d21,
y + d22,
z + par10 * (1.0D - d22) - d21,
d11,
d10
);
tessellator.addVertexWithUV(x + d21 + par8, y, z - d21 + par10, d15, d14);
tessellator.addVertexWithUV(x + d21 + par8, y, z + d21 + par10, d15, d16);
tessellator.addVertexWithUV(x - d21 + par8, y, z + d21 + par10, d13, d16);
tessellator.addVertexWithUV(x - d21 + par8, y, z - d21 + par10, d13, d14);
tessellator.addVertexWithUV(x - d21, y + 1.0D, d19, d5, d6);
tessellator.addVertexWithUV(x - d21 + par8, y + 0.0D, d19 + par10, d5, d8);
tessellator.addVertexWithUV(x - d21 + par8, y + 0.0D, d20 + par10, d7, d8);
tessellator.addVertexWithUV(x - d21, y + 1.0D, d20, d7, d6);
tessellator.addVertexWithUV(x + d21, y + 1.0D, d20, d5, d6);
tessellator.addVertexWithUV(x + par8 + d21, y + 0.0D, d20 + par10, d5, d8);
tessellator.addVertexWithUV(x + par8 + d21, y + 0.0D, d19 + par10, d7, d8);
tessellator.addVertexWithUV(x + d21, y + 1.0D, d19, d7, d6);
tessellator.addVertexWithUV(d17, y + 1.0D, z + d21, d5, d6);
tessellator.addVertexWithUV(d17 + par8, y + 0.0D, z + d21 + par10, d5, d8);
tessellator.addVertexWithUV(d18 + par8, y + 0.0D, z + d21 + par10, d7, d8);
tessellator.addVertexWithUV(d18, y + 1.0D, z + d21, d7, d6);
tessellator.addVertexWithUV(d18, y + 1.0D, z - d21, d5, d6);
tessellator.addVertexWithUV(d18 + par8, y + 0.0D, z - d21 + par10, d5, d8);
tessellator.addVertexWithUV(d17 + par8, y + 0.0D, z - d21 + par10, d7, d8);
tessellator.addVertexWithUV(d17, y + 1.0D, z - d21, d7, d6);
}
@Override
public void
renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) {}
@Override
public boolean renderWorldBlock(
IBlockAccess world,
int x,
int y,
int z,
Block block,
int modelId,
RenderBlocks renderer
) {
return this.renderBlockTorch(block, x, y, z);
}
@Override
public boolean shouldRender3DInInventory(int alec) {
return false;
}
@Override
public int getRenderId() {
return RI;
}
}

View File

@ -0,0 +1,76 @@
package ley.modding.dartcraft.client.renderer.entity;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import ley.modding.dartcraft.entity.EntityFrozenItem;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.client.renderer.entity.RenderLiving;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
@SideOnly(Side.CLIENT)
public class RenderEntityFrozenItem extends RenderLiving {
public RenderItem itren = new RenderItem();
public RenderEntityFrozenItem() {
super((ModelBase) null, 0.2F);
}
@Override
public void setRenderManager(RenderManager rm) {
super.setRenderManager(rm);
this.itren.setRenderManager(rm);
}
@Override
public void doRender(
Entity entity, double par2, double par4, double par6, float par8, float par9
) {
EntityFrozenItem item = (EntityFrozenItem) entity;
ItemStack stack = item.getEntityItem();
GL11.glPushMatrix();
GL11.glTranslated(par2, par4, par6);
GL11.glScalef(0.5F, 0.5F, 0.5F);
try {
if (item != null && stack != null) {
//if (item.dartArrow != null) {
// EntityDartArrow e = new EntityDartArrow(item.worldObj);
// e.readFromNBT(item.dartArrow);
// item.worldObj.spawnEntityInWorld(e);
// item.worldObj.removeEntity(e);
//} else
if (item.arrow != null) {
EntityArrow e1 = new EntityArrow(item.worldObj);
e1.readFromNBT(item.arrow);
//item.worldObj.spawnEntityInWorld(e1);
//item.worldObj.removeEntity(e1);
} else {
EntityItem e2 = new EntityItem(
item.worldObj, item.posX, item.posY, item.posZ, stack.copy()
);
e2.delayBeforeCanPickup = 100;
e2.hoverStart = item.storedRotation;
itren.doRender(e2, par2, par4, par6, par8, par9);
}
}
} catch (Exception e) {
e.printStackTrace();
}
GL11.glPopMatrix();
}
@Override
protected ResourceLocation getEntityTexture(Entity entity) {
return TextureMap.locationItemsTexture;
}
}

View File

@ -0,0 +1,17 @@
package ley.modding.dartcraft.client.renderer.entity;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.entity.Entity;
import net.minecraft.util.ResourceLocation;
public class RenderEntityTime extends Render {
@Override
protected ResourceLocation getEntityTexture(Entity alec0) {
return null;
}
@Override
public void doRender(
Entity alec0, double alec1, double alec2, double alec3, float alec4, float alec5
) {}
}

View File

@ -0,0 +1,302 @@
package ley.modding.dartcraft.entity;
import ley.modding.dartcraft.Dartcraft;
import ley.modding.dartcraft.api.IBottleRenderable;
import ley.modding.dartcraft.proxy.CommonProxy;
import ley.modding.dartcraft.util.UpgradeHelper;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.init.Items;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
public class EntityFrozenItem extends EntityLiving implements IBottleRenderable {
public int frozenTime;
public int savedSpan;
public float storedRotation;
protected double storedMotionX;
protected double storedMotionY;
protected double storedMotionZ;
private int timeout;
public NBTTagCompound arrow;
public NBTTagCompound dartArrow;
public EntityFrozenItem(World world) {
super(world);
this.motionX = 0.0D;
this.motionY = 0.0D;
this.motionZ = 0.0D;
this.storedRotation = CommonProxy.rand.nextFloat() * 2.0F;
float size = 0.1F;
this.ySize = size;
this.setSize(size, size);
this.boundingBox.maxX = (double) size;
this.boundingBox.maxY = (double) size;
this.boundingBox.maxZ = (double) size;
}
public EntityFrozenItem(World world, Entity item, int time) {
this(world);
this.posX = item.posX;
this.posY = item.posY;
this.posZ = item.posZ;
this.storedMotionX = item.motionX;
this.storedMotionY = item.motionY;
this.storedMotionZ = item.motionZ;
this.frozenTime = time;
if (item instanceof EntityItem) {
EntityItem entityItem = (EntityItem) item;
this.savedSpan = entityItem.lifespan;
this.setEntityItem(entityItem.getEntityItem());
//} else if (item instanceof EntityDartArrow) {
// this.dartArrow = new NBTTagCompound();
// item.writeToNBT(this.dartArrow);
// this.setEntityItem(new ItemStack(DartItem.forceArrow));
} else if (item instanceof EntityArrow) {
this.arrow = new NBTTagCompound();
item.writeToNBT(this.arrow);
this.setEntityItem(new ItemStack(Items.arrow));
}
}
@Override
protected void entityInit() {
this.getDataWatcher().addObjectByDataType(12, 5);
super.entityInit();
}
@Override
public void onUpdate() {
--this.timeout;
if (!Dartcraft.proxy.isSimulating(this.worldObj) && this.timeout <= 0) {
this.timeout = 40;
//if (this.item == null) {
// //this.sendDescriptionPacket();
//}
}
this.motionX = 0.0D;
this.motionY = 0.0D;
this.motionZ = 0.0D;
--this.frozenTime;
if (this.frozenTime <= 0 && Dartcraft.proxy.isSimulating(this.worldObj)
&& this.getEntityItem() != null) {
this.worldObj.removeEntity(this);
this.setDead();
try {
//if (this.dartArrow != null) {
// EntityDartArrow e = new EntityDartArrow(this.worldObj);
// e.readFromNBT(this.dartArrow);
// this.worldObj.spawnEntityInWorld(e);
//} else
if (this.arrow != null) {
EntityArrow var4 = new EntityArrow(this.worldObj);
var4.readFromNBT(this.arrow);
this.worldObj.spawnEntityInWorld(var4);
} else {
EntityItem var5 = new EntityItem(
this.worldObj,
this.posX,
this.posY,
this.posZ,
this.getEntityItem().copy()
);
var5.lifespan = this.savedSpan;
var5.delayBeforeCanPickup = 10;
var5.prevPosX = var5.posX;
var5.prevPosY = var5.posY;
var5.prevPosZ = var5.posZ;
var5.ticksExisted = 1;
var5.motionX = this.storedMotionX;
var5.motionY = this.storedMotionY;
var5.motionZ = this.storedMotionZ;
NBTTagCompound dartTag = UpgradeHelper.getDartData(var5);
dartTag.setInteger("timeImmune", 2);
this.worldObj.spawnEntityInWorld(var5);
}
this.setEntityItem(null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void readEntityFromNBT(NBTTagCompound comp) {
if (comp.hasKey("item")) {
try {
this.setEntityItem(
ItemStack.loadItemStackFromNBT(comp.getCompoundTag("item"))
);
this.frozenTime = comp.getInteger("frozenTime");
this.savedSpan = comp.getInteger("savedSpan");
this.storedMotionX = comp.getDouble("storedMotionX");
this.storedMotionY = comp.getDouble("storedMotionY");
this.storedMotionZ = comp.getDouble("storedMotionZ");
if (comp.hasKey("dartArrow")) {
this.dartArrow = comp.getCompoundTag("dartArrow");
}
if (comp.hasKey("arrow")) {
this.arrow = comp.getCompoundTag("arrow");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void writeEntityToNBT(NBTTagCompound comp) {
ItemStack item = this.getEntityItem();
if (item != null) {
try {
NBTTagCompound e = new NBTTagCompound();
item.writeToNBT(e);
comp.setTag("item", e);
comp.setInteger("frozenTime", this.frozenTime);
comp.setInteger("savedSpan", this.savedSpan);
comp.setDouble("storedMotionX", this.storedMotionX);
comp.setDouble("storedMotionY", this.storedMotionY);
comp.setDouble("storedMotionZ", this.storedMotionZ);
if (this.dartArrow != null) {
comp.setTag("dartArrow", this.dartArrow);
}
if (this.arrow != null) {
comp.setTag("arrow", this.arrow);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public ItemStack getEntityItem() {
return this.getDataWatcher().getWatchableObjectItemStack(12);
}
@Override
public void setEntityItem(ItemStack stack) {
this.getDataWatcher().updateObject(12, stack);
//if (Dartcraft.proxy.isSimulating(this.worldObj)) {
// if (this.item != null && (this.arrow != null || this.dartArrow != null)) {
// if (!this.item.hasTagCompound()) {
// this.item.setTagCompound(new NBTTagCompound());
// }
// if (this.dartArrow != null) {
// this.item.getTagCompound().setTag("storedDartArrow",
// this.dartArrow);
// } else if (this.arrow != null) {
// this.item.getTagCompound().setTag("storedArrow", this.arrow);
// }
// }
// //this.sendDescriptionPacket();
//} else if (this.item.hasTagCompound()) {
// NBTTagCompound comp = this.item.getTagCompound();
// if (comp.hasKey("storedDartArrow")) {
// this.dartArrow = comp.getCompoundTag("storedDartArrow");
// } else if (comp.hasKey("storedArrow")) {
// this.arrow = comp.getCompoundTag("storedArrow");
// }
//}
}
//@Override
//public void sendDescriptionPacket() {
// NBTTagCompound comp;
// if (Dartcraft.proxy.isSimulating(this.worldObj)) {
// if (this.item != null) {
// comp = this.item.writeToNBT(new NBTTagCompound());
// if (comp != null) {
// comp.setInteger("bottleID", this.entityId);
// PacketDispatcher.sendPacketToAllInDimension(
// (new PacketNBT(49, comp)).getPacket(), this.dimension
// );
// }
// }
// } else {
// comp = new NBTTagCompound();
// comp.setInteger("dim", this.dimension);
// comp.setInteger("bottleID", this.entityId);
// PacketDispatcher.sendPacketToServer((new PacketNBT(50, comp)).getPacket());
// }
//}
@Override
protected boolean interact(EntityPlayer player) {
try {
ItemStack item = this.getEntityItem();
player.swingItem();
if (Dartcraft.proxy.isSimulating(this.worldObj) && player != null
&& item != null) {
EntityItem e = new EntityItem(
this.worldObj, player.posX, player.posY, player.posZ, item
);
e.motionX = 0.0D;
e.motionY = 0.0D;
e.motionZ = 0.0D;
e.delayBeforeCanPickup = 0;
NBTTagCompound dartTag = UpgradeHelper.getDartData(e);
dartTag.setInteger("timeImmune", 2);
if (this.arrow != null || this.dartArrow != null) {
e.getEntityItem().setTagCompound((NBTTagCompound) null);
}
this.setDead();
this.worldObj.spawnEntityInWorld(e);
this.worldObj.removeEntity(this);
}
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
// TODO: WTF
//@Override
//public boolean func_85031_j(Entity entity) {
// if (entity instanceof EntityPlayer) {
// this.customInteract((EntityPlayer) entity);
// }
// return true;
//}
@Override
public AxisAlignedBB getBoundingBox() {
try {
ItemStack item = this.getEntityItem();
if (item != null
&& (item.getItem() instanceof ItemBlock || this.dartArrow != null
|| this.arrow != null)) {
return this.boundingBox;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public boolean isEntityInvulnerable() {
return true;
}
@Override
public boolean canBePushed() {
return false;
}
}

View File

@ -0,0 +1,302 @@
package ley.modding.dartcraft.entity;
import java.util.List;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import ley.modding.dartcraft.Config;
import ley.modding.dartcraft.Dartcraft;
import ley.modding.dartcraft.network.PacketFX;
import ley.modding.dartcraft.tile.TileEntityForceTorch;
import ley.modding.dartcraft.util.UpgradeHelper;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.init.Blocks;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
public class EntityTime extends Entity {
public static final int TYPE_NONE = 0;
public static final int TYPE_STOP = 1;
public static final int TYPE_SLOW = 2;
public static final int TYPE_FAST = 3;
public static final int TYPE_HYPER = 4;
public int type;
public static double RANGE = 6.0D;
private int lifeTime;
private boolean checked;
public EntityTime(World world) {
super(world);
this.lifeTime = 200;
this.checked = false;
}
public EntityTime(World world, int life) {
this(world);
this.lifeTime = life;
}
@Override
protected void entityInit() {}
@Override
public void onUpdate() {
--this.lifeTime;
if (this.lifeTime <= 0) {
this.setDead();
} else {
this.customTick();
}
}
private void customTick() {
if (Dartcraft.proxy.isSimulating(this.worldObj) && this.lifeTime % 20 == 0
|| !this.checked) {
this.spawnParticles();
}
if (this.lifeTime % 5 == 0 || !this.checked) {
this.checkEntities();
}
}
public void checkEntities() {
try {
if (!Config.timeAffectBlocks && !Config.timeAffectTiles
&& !Config.timeUpgradeRod && !Config.timeUpgradeSword
&& !Config.timeUpgradeTorch) {
return;
}
AxisAlignedBB e = AxisAlignedBB.getBoundingBox(
this.posX - RANGE,
this.posY - RANGE,
this.posZ - RANGE,
this.posX + RANGE,
this.posY + RANGE,
this.posZ + RANGE
);
((List<Entity>) this.worldObj.getEntitiesWithinAABB(Entity.class, e))
.stream()
.filter(
j
-> j != null && !(j instanceof EntityTime)
&& !(j instanceof EntityPlayer) && !(j instanceof EntityBottle)
)
.forEach(j -> {
NBTTagCompound k = UpgradeHelper.getDartData(j);
if (!(j instanceof EntityFrozenItem) && !(j instanceof EntityItem)) {
if (k.getInteger("timeImmune") > 0) {
return;
}
k.setInteger("time", this.type);
k.setInteger("timeTime", this.lifeTime);
}
switch (this.type) {
case 1:
if (j instanceof EntityArrow
&& (j.posX != j.prevPosX || j.posY != j.prevPosY
|| j.posZ != j.prevPosZ)) {
EntityFrozenItem chance = new EntityFrozenItem(
this.worldObj, j, this.lifeTime
);
this.worldObj.removeEntity(j);
this.worldObj.spawnEntityInWorld(chance);
}
if (j instanceof EntityItem) {
EntityItem var19 = (EntityItem) j;
if (k.hasKey("timeImmune")) {
k.setInteger(
"timeImmune", k.getInteger("timeImmune") - 1
);
if (k.getInteger("timeImmune") <= 0) {
k.removeTag("timeImmune");
}
} else if(var19.getEntityItem() != null && var19.getEntityItem().stackSize >= 1) {
short freq = 600;
EntityFrozenItem e1 = new EntityFrozenItem(
this.worldObj, var19, freq
);
var19.setEntityItemStack(
var19.getEntityItem().splitStack(0)
);
this.worldObj.removeEntity(var19);
this.worldObj.spawnEntityInWorld(e1);
}
}
//case 0:
//case 2:
//case 3:
//case 4:
default:
break;
}
});
;
if (this.type == 3 || this.type == 4) {
for (int x = (int) (this.posX - RANGE); x < (int) (this.posX + RANGE);
++x) {
for (int y = (int) (this.posY - RANGE); y < (int) (this.posY + RANGE);
++y) {
for (int z = (int) (this.posZ - RANGE);
z < (int) (this.posZ + RANGE);
++z) {
float var20 = this.type == 4 ? 0.5F : 0.1F;
try {
if (Config.timeAffectBlocks) {
Block block = this.worldObj.getBlock(x, y, z);
if (block != Blocks.air) {
if (block != null
&& var20 >= this.rand.nextFloat()) {
block.updateTick(
this.worldObj, x, y, z, this.rand
);
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
Block var21 = this.type == 4 ? Blocks.glass : Blocks.planks;
try {
TileEntity var23 = this.worldObj.getTileEntity(x, y, z);
if (var23 != null && !(var23 instanceof TileEntityForceTorch)
&& Config.timeAffectTiles
/*&& (!Config.timeAffectWhitelist
|| DartPluginForceWrench.isTileBlacklisted(
var23.getClass()
))*/) {
// TODO: WTF
//if (var23 instanceof TileEntityMobSpawner) {
// TileEntityMobSpawner l
// = (TileEntityMobSpawner) var23;
// if (!(l.getSpawnerLogic()
// instanceof CustomEntityLogic)) {
// String logic = l.getSpawnerLogic()
// .getEntityNameToSpawn();
// CustomEntityLogic logic1
// = new CustomEntityLogic(l,
// this.type);
// SpawnerReflector.setLogic(l, logic1);
// } else {
// CustomEntityLogic var25
// = (CustomEntityLogic)
// l.getSpawnerLogic();
// var25.setHyper();
// }
//}
// TODO: WTF
//if (!ForestryTimer.handleTile(var23, var21)) {
// for (int var24 = 0; var24 < var21; ++var24)
// {
// var23.updateEntity();
// }
//}
}
} catch (Exception var14) {
var14.printStackTrace();
}
}
}
}
}
} catch (Exception var15) {
var15.printStackTrace();
}
this.checked = true;
}
public void spawnParticles() {
if (this.lifeTime >= 20) {
byte type = 4;
switch (this.type) {
case 0:
return;
case 1:
case 2:
type = 3;
break;
case 3:
type = 2;
break;
case 4:
type = 1;
}
Dartcraft.channel.sendToAllAround(
new PacketFX(
this.posX, this.posY, this.posZ, PacketFX.Type.TIME, type, 0, 1
),
new TargetPoint(
this.worldObj.provider.dimensionId,
this.posX,
this.posY,
this.posZ,
80d
)
);
}
}
public boolean setType(int type, boolean playSound) {
if (type >= 0 && type <= 4) {
this.type = type;
if (playSound) {
String sound = "dartcraft:";
switch (this.type) {
case 1:
case 2:
sound = sound + "slowDown";
break;
case 3:
case 4:
sound = sound + "speedUp";
}
if (this.worldObj != null) {
this.worldObj.playSoundAtEntity(this, sound, 1.0F, 1.0F);
}
}
return true;
} else {
this.type = 0;
return false;
}
}
@Override
protected void readEntityFromNBT(NBTTagCompound comp) {
try {
this.setType(comp.getInteger("timeType"), false);
this.lifeTime = comp.getInteger("lifeTime");
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void writeEntityToNBT(NBTTagCompound comp) {
try {
comp.setInteger("timeType", this.type);
comp.setInteger("lifeTime", this.lifeTime);
} catch (Exception e) {
e.printStackTrace();
}
}
}

View File

@ -4,6 +4,7 @@ import ley.modding.dartcraft.util.Util;
import net.minecraft.block.Block;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
public abstract class AbstractItemBlockMetadata extends ItemBlock {
public AbstractItemBlockMetadata(Block block) {
@ -19,6 +20,11 @@ public abstract class AbstractItemBlockMetadata extends ItemBlock {
return damage;
}
@Override
public IIcon getIconFromDamage(int meta) {
return this.field_150939_a.getIcon(0, meta);
}
@Override
public String getUnlocalizedName(ItemStack stack) {
return "tile." + this.getID() + stack.getItemDamage();

View File

@ -1,74 +0,0 @@
package ley.modding.dartcraft.network;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import io.netty.buffer.ByteBuf;
public abstract class DartPacket implements IMessage {
protected String receiver;
protected int dimensionID;
protected NetworkRegistry.TargetPoint point;
public abstract boolean getToClient();
public abstract boolean isDimPacket();
public int getDimID() {
return this.dimensionID;
}
public String getReceiver() {
return this.receiver;
}
public NetworkRegistry.TargetPoint getLocation() {
return this.point;
}
public void fromBytes(ByteBuf buf) {
try {
if (isDimPacket())
this.dimensionID = buf.readByte();
int nameSize = buf.readByte();
if (nameSize > 0) {
this.receiver = "";
for (int i = 0; i < nameSize; i++)
this.receiver += buf.readChar();
}
if (buf.readBoolean())
this.point = new NetworkRegistry.TargetPoint(
buf.readInt(),
buf.readDouble(),
buf.readDouble(),
buf.readDouble(),
buf.readDouble()
);
} catch (Exception e) {
e.printStackTrace();
}
}
public void toBytes(ByteBuf buf) {
if (this.receiver == null)
this.receiver = "";
try {
if (isDimPacket())
buf.writeByte(this.dimensionID);
buf.writeByte((this.receiver != null) ? this.receiver.length() : 0);
for (int i = 0; i < this.receiver.length(); i++)
buf.writeChar(this.receiver.charAt(i));
buf.writeBoolean((this.point != null));
if (this.point != null) {
buf.writeInt(this.point.dimension);
buf.writeDouble(this.point.x);
buf.writeDouble(this.point.y);
buf.writeDouble(this.point.z);
buf.writeDouble(this.point.range);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

View File

@ -5,40 +5,31 @@ import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import io.netty.buffer.ByteBuf;
import ley.modding.dartcraft.client.gui.ContainerClipboard;
import ley.modding.dartcraft.util.EntityUtils;
import net.minecraft.entity.player.EntityPlayer;
public class PacketClipButton extends DartPacket implements IMessage {
public class PacketClipButton implements IMessage {
protected int button;
public PacketClipButton() {}
public PacketClipButton(EntityPlayer player, int button) {
public PacketClipButton(int button) {
this.button = button;
this.receiver = player.getCommandSenderName();
}
public boolean getToClient() {
return false;
}
public boolean isDimPacket() {
return false;
}
@Override
public void fromBytes(ByteBuf buf) {
super.fromBytes(buf);
this.button = buf.readByte();
}
@Override
public void toBytes(ByteBuf buf) {
super.toBytes(buf);
buf.writeByte(this.button);
}
public static class Handler implements IMessageHandler<PacketClipButton, IMessage> {
@Override
public IMessage onMessage(PacketClipButton packet, MessageContext ctx) {
EntityPlayer player = EntityUtils.getPlayerByName(packet.getReceiver());
EntityPlayer player = ctx.getServerHandler().playerEntity;
if (player != null) {
ContainerClipboard clipboard
= (player.openContainer != null

View File

@ -0,0 +1,91 @@
package ley.modding.dartcraft.network;
import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
import ley.modding.dartcraft.util.FXUtils;
public class PacketFX implements IMessage {
public double x;
public double y;
public double z;
public Type type;
public int subType;
public int area;
public int amount;
public PacketFX() {}
public PacketFX(
double x, double y, double z, Type type, int subType, int area, int amount
) {
this.x = x;
this.y = y;
this.z = z;
this.type = type;
this.subType = subType;
this.area = area;
this.amount = amount;
}
@Override
public void fromBytes(ByteBuf buf) {
this.x = buf.readDouble();
this.y = buf.readDouble();
this.z = buf.readDouble();
this.type = Type.fromInt(buf.readInt());
this.subType = buf.readInt();
this.area = buf.readInt();
this.amount = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeDouble(this.x);
buf.writeDouble(this.y);
buf.writeDouble(this.z);
buf.writeInt(this.type.ordinal());
buf.writeInt(this.subType);
buf.writeInt(this.area);
buf.writeInt(this.amount);
}
public static enum Type {
TIME;
public static Type fromInt(int i) {
if (i >= 0 && i < Type.values().length)
return Type.values()[i];
return null;
}
}
public static class Handler implements IMessageHandler<PacketFX, IMessage> {
@Override
@SideOnly(Side.CLIENT)
public IMessage onMessage(PacketFX pkt, MessageContext ctx) {
switch (pkt.type) {
case TIME:
FXUtils.makeTimeEffects(
FMLClientHandler.instance().getClientPlayerEntity().worldObj,
pkt.x,
pkt.y,
pkt.z,
1,
pkt.amount,
pkt.area
);
break;
}
return null;
}
}
}

View File

@ -2,18 +2,25 @@ package ley.modding.dartcraft.proxy;
import cpw.mods.fml.client.registry.ClientRegistry;
import cpw.mods.fml.client.registry.RenderingRegistry;
import ley.modding.dartcraft.Config;
import ley.modding.dartcraft.Dartcraft;
import ley.modding.dartcraft.block.DartBlocks;
import ley.modding.dartcraft.client.renderer.block.PowerOreRenderer;
import ley.modding.dartcraft.client.renderer.block.RenderBlockPowerOre;
import ley.modding.dartcraft.client.renderer.block.RenderBlockTorch;
import ley.modding.dartcraft.client.renderer.block.RenderTileForceEngine;
import ley.modding.dartcraft.client.renderer.entity.RenderColdAnimal;
import ley.modding.dartcraft.client.renderer.entity.RenderEntityBottle;
import ley.modding.dartcraft.client.renderer.entity.RenderEntityFrozenItem;
import ley.modding.dartcraft.client.renderer.entity.RenderEntityTime;
import ley.modding.dartcraft.client.renderer.item.RenderItemEngine;
import ley.modding.dartcraft.client.renderer.item.RenderItemForceFlask;
import ley.modding.dartcraft.entity.*;
import ley.modding.dartcraft.entity.EntityBottle;
import ley.modding.dartcraft.entity.EntityColdChicken;
import ley.modding.dartcraft.entity.EntityColdCow;
import ley.modding.dartcraft.entity.EntityColdPig;
import ley.modding.dartcraft.entity.EntityFlyingFlask;
import ley.modding.dartcraft.entity.EntityFrozenItem;
import ley.modding.dartcraft.entity.EntityTime;
import ley.modding.dartcraft.item.DartItems;
import ley.modding.dartcraft.network.DartPacket;
import ley.modding.dartcraft.tile.TileEntityForceEngine;
import net.minecraft.client.model.ModelChicken;
import net.minecraft.client.model.ModelCow;
@ -69,8 +76,16 @@ public class ClientProxy extends CommonProxy {
EntityColdPig.class,
new RenderColdAnimal(new ModelPig(), 0.6f, "textures/entity/coldPig.png")
);
Config.powerOreRenderID = RenderingRegistry.getNextAvailableRenderId();
RenderingRegistry.registerBlockHandler(new PowerOreRenderer());
RenderingRegistry.registerEntityRenderingHandler(
EntityTime.class, new RenderEntityTime()
);
RenderingRegistry.registerEntityRenderingHandler(
EntityFrozenItem.class, new RenderEntityFrozenItem()
);
RenderBlockPowerOre.RI = RenderingRegistry.getNextAvailableRenderId();
RenderingRegistry.registerBlockHandler(new RenderBlockPowerOre());
RenderBlockTorch.RI = RenderingRegistry.getNextAvailableRenderId();
RenderingRegistry.registerBlockHandler(new RenderBlockTorch());
engineRender = new RenderTileForceEngine();
ClientRegistry.bindTileEntitySpecialRenderer(
TileEntityForceEngine.class, engineRender
@ -79,13 +94,4 @@ public class ClientProxy extends CommonProxy {
Item.getItemFromBlock(DartBlocks.engine), new RenderItemEngine()
);
}
@Override
public void sendPacketToServer(DartPacket packet) {
try {
Dartcraft.channel.sendToServer(packet);
} catch (Exception e) {
e.printStackTrace();
}
}
}

View File

@ -4,7 +4,6 @@ import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.common.network.NetworkRegistry;
import ley.modding.dartcraft.Dartcraft;
import ley.modding.dartcraft.client.gui.GuiHandler;
import ley.modding.dartcraft.network.DartPacket;
import ley.modding.dartcraft.util.ForceUpgradeManager;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
@ -34,6 +33,4 @@ public class CommonProxy {
ForceUpgradeManager.load();
NetworkRegistry.INSTANCE.registerGuiHandler(Dartcraft.instance, new GuiHandler());
}
public void sendPacketToServer(DartPacket packet) {}
}

View File

@ -0,0 +1,276 @@
package ley.modding.dartcraft.tile;
import java.util.List;
import cpw.mods.fml.common.Loader;
import ley.modding.dartcraft.Config;
import ley.modding.dartcraft.Dartcraft;
import ley.modding.dartcraft.entity.EntityTime;
import ley.modding.dartcraft.util.DartUtils;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.boss.EntityWither;
import net.minecraft.entity.monster.EntityGhast;
import net.minecraft.entity.monster.EntityMob;
import net.minecraft.entity.monster.EntitySlime;
import net.minecraft.entity.monster.EntityWitch;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.DamageSource;
public class TileEntityForceTorch extends TileEntity {
public NBTTagCompound upgrades = new NBTTagCompound();
public byte color = 0;
public int timeType = 1;
private int timeout;
private int maxTimeout;
@Override
public boolean canUpdate() {
return true;
}
@Override
public void updateEntity() {
if (Dartcraft.proxy.isSimulating(this.worldObj) && this.upgrades != null
&& !this.upgrades.hasNoTags()) {
++this.timeout;
if (this.timeout >= this.maxTimeout) {
this.timeout = 0;
this.maxTimeout = Config.torchFreq
+ (int) (this.worldObj.rand.nextFloat() * (float) Config.torchFreq
/ 2.0F);
int time;
if (this.upgrades.hasKey("Light")) {
time = this.upgrades.getInteger("Light");
}
if (this.upgrades.hasKey("Healing")) {
try {
AxisAlignedBB var13 = AxisAlignedBB.getBoundingBox(
(double) this.xCoord - (double) Config.torchDist,
(double) this.yCoord - (double) Config.torchDist,
(double) this.zCoord - (double) Config.torchDist,
(double) this.xCoord + (double) Config.torchDist,
(double) this.yCoord + (double) Config.torchDist,
(double) this.zCoord + (double) Config.torchDist
);
List<EntityLivingBase> j = this.worldObj.getEntitiesWithinAABB(
EntityLivingBase.class, var13
);
boolean k = false;
int tile = 1;
for (EntityLivingBase entity : j) {
if (entity != null) {
if (!entity.isEntityUndead()
&& !(entity instanceof EntityGhast)) {
float entityUpgrades
= (float) entity.getAttributeMap()
.getAttributeInstanceByName(
"generic.maxHealth"
)
.getAttributeValue();
if (entity.getHealth() < entityUpgrades) {
entity.heal((float) (tile * 2));
k = true;
// TODO
//PacketHelper.sendCureFXToClients(
// entity, 8 * tile
//);
}
} else {
// TODO
//entity.attackEntityFrom(PunishDamage.instance, 2.0F);
}
if (k) {
this.worldObj.playSoundEffect(
(double) this.xCoord,
(double) this.yCoord,
(double) this.zCoord,
"dartcraft:cure",
0.5F,
DartUtils.randomPitch()
);
}
}
}
} catch (Exception var12) {
;
}
}
if (this.upgrades.hasKey("Bane")) {
try {
AxisAlignedBB var13 = AxisAlignedBB.getBoundingBox(
(double) this.xCoord - (double) Config.torchDist,
(double) this.yCoord - (double) Config.torchDist,
(double) this.zCoord - (double) Config.torchDist,
(double) this.xCoord + (double) Config.torchDist,
(double) this.yCoord + (double) Config.torchDist,
(double) this.zCoord + (double) Config.torchDist
);
List<EntityLivingBase> j = this.worldObj.getEntitiesWithinAABB(
EntityLivingBase.class, var13
);
boolean k = false;
for (EntityLivingBase var18 : j) {
if (var18 != null
&& (var18 instanceof EntityMob
|| var18 instanceof EntitySlime
|| var18 instanceof EntityGhast)
&& !(var18 instanceof EntityWitch)
&& !(var18 instanceof EntityWither)) {
this.worldObj.removeEntity(var18);
k = true;
// TODO
//PacketHelper.sendChangeFXToClients(var18, 16);
}
}
if (k) {
this.worldObj.playSoundEffect(
(double) this.xCoord,
(double) this.yCoord,
(double) this.zCoord,
"random.pop",
1.0F,
DartUtils.randomPitch()
);
}
} catch (Exception var11) {
;
}
}
if (this.upgrades.hasKey("Heat")) {
try {
AxisAlignedBB var13 = AxisAlignedBB.getBoundingBox(
(double) this.xCoord - (double) Config.torchDist,
(double) this.yCoord - (double) Config.torchDist,
(double) this.zCoord - (double) Config.torchDist,
(double) this.xCoord + (double) Config.torchDist,
(double) this.yCoord + (double) Config.torchDist,
(double) this.zCoord + (double) Config.torchDist
);
List<EntityLivingBase> j = this.worldObj.getEntitiesWithinAABB(
EntityLivingBase.class, var13
);
boolean k = false;
int tile = 1;
for (EntityLivingBase entity : j) {
if (entity != null && !entity.isImmuneToFire()) {
NBTTagCompound var20 = new NBTTagCompound();
if (entity instanceof EntityPlayer) {
EntityPlayer player = (EntityPlayer) entity;
// TODO: WTF
//var20 = SocketHelper.getArmorCompound(player);
}
if (!var20.hasKey("Heat")
|| var20.getInteger("Heat") < 3) {
entity.setFire(tile);
entity.attackEntityFrom(
DamageSource.inFire, 0.5F * (float) tile
);
k = true;
// TODO
//PacketHelper.sendHeatFXToClients(entity, 8 * tile,
//0);
}
}
}
if (k) {
this.worldObj.playSoundEffect(
(double) this.xCoord,
(double) this.yCoord,
(double) this.zCoord,
"dartcraft:ignite",
1.0F,
DartUtils.randomPitch()
);
}
} catch (Exception var10) {
;
}
}
if (this.upgrades.hasKey("Repair") && Loader.isModLoaded("Thaumcraft")) {
try {
for (time = -Config.torchDist; time < Config.torchDist; ++time) {
for (int var15 = -Config.torchDist; var15 < Config.torchDist;
++var15) {
for (int var19 = -Config.torchDist;
var19 < Config.torchDist;
++var19) {
TileEntity var17 = this.worldObj.getTileEntity(
this.xCoord + time,
this.yCoord + var15,
this.zCoord + var19
);
// TODO: TC
//if (var17 != null
// && ThaumCraftIntegration.isDeconstructor(var17))
// { ThaumCraftIntegration.setDeconAspect(var17);
// break label110;
//}
}
}
}
} catch (Exception var9) {
;
}
}
if (this.upgrades.hasKey("Time") && Config.timeUpgradeTorch) {
EntityTime var14 = new EntityTime(this.worldObj, this.maxTimeout - 2);
var14.posX = (double) this.xCoord + 0.5D;
var14.posY = (double) this.yCoord + 0.5D;
var14.posZ = (double) this.zCoord + 0.5D;
var14.setType(this.timeType, false);
this.worldObj.spawnEntityInWorld(var14);
}
}
}
}
@Override
public Packet getDescriptionPacket() {
NBTTagCompound nbt = new NBTTagCompound();
this.writeToNBT(nbt);
return new S35PacketUpdateTileEntity(
this.xCoord, this.yCoord, this.zCoord, this.getBlockMetadata(), nbt
);
}
@Override
public void onDataPacket(NetworkManager arg0, S35PacketUpdateTileEntity arg1) {
this.readFromNBT(arg1.func_148857_g());
}
@Override
public void readFromNBT(NBTTagCompound comp) {
super.readFromNBT(comp);
this.upgrades = comp.getCompoundTag("upgrades");
this.color = comp.getByte("color");
this.timeType = comp.getByte("timeType");
}
@Override
public void writeToNBT(NBTTagCompound comp) {
super.writeToNBT(comp);
comp.setTag("upgrades", this.upgrades);
comp.setByte("color", this.color);
comp.setByte("timeType", (byte) this.timeType);
}
}

View File

@ -9,6 +9,7 @@ import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import ley.modding.dartcraft.Dartcraft;
import ley.modding.dartcraft.client.fx.FXDisney;
import ley.modding.dartcraft.client.fx.FXTime;
import ley.modding.dartcraft.proxy.CommonProxy;
import net.minecraft.client.particle.EffectRenderer;
import net.minecraft.client.particle.EntityFireworkStarterFX;
@ -503,33 +504,31 @@ public class FXUtils {
for (int fx = -area; fx < area + 1; ++fx) {
for (int k = -area; k < area + 1; ++k) {
for (int l = 0; l < num; ++l) {
// TODO
//FXTime fx1 = new FXTime(
// world,
// x + (double) i + world.rand.nextDouble()
// - world.rand.nextDouble(),
// y + (double) fx + world.rand.nextDouble()
// - world.rand.nextDouble(),
// z + (double) k + world.rand.nextDouble()
// - world.rand.nextDouble(),
// type
//);
//renderer.addEffect(fx1);
FXTime fx1 = new FXTime(
world,
x + (double) i + world.rand.nextDouble()
- world.rand.nextDouble(),
y + (double) fx + world.rand.nextDouble()
- world.rand.nextDouble(),
z + (double) k + world.rand.nextDouble()
- world.rand.nextDouble(),
type
);
renderer.addEffect(fx1);
}
}
}
}
} else {
for (i = 0; i < num; ++i) {
// TODO
//FXTime var16 = new FXTime(
// world,
// x + world.rand.nextDouble() - world.rand.nextDouble(),
// y + world.rand.nextDouble() - world.rand.nextDouble(),
// z + world.rand.nextDouble() - world.rand.nextDouble(),
// type
//);
//renderer.addEffect(var16);
FXTime var16 = new FXTime(
world,
x + world.rand.nextDouble() - world.rand.nextDouble(),
y + world.rand.nextDouble() - world.rand.nextDouble(),
z + world.rand.nextDouble() - world.rand.nextDouble(),
type
);
renderer.addEffect(var16);
}
}
}

View File

@ -0,0 +1,65 @@
package ley.modding.dartcraft.util;
import net.minecraft.entity.Entity;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
public class UpgradeHelper {
public static NBTTagCompound getUpgradeCompound(ItemStack stack) {
return stack != null && stack.hasTagCompound()
&& stack.getTagCompound().hasKey("upgrades")
? stack.getTagCompound().getCompoundTag("upgrades")
: new NBTTagCompound();
}
public static ItemStack setUpgradeData(ItemStack stack, String type, int level) {
if (stack == null)
return null;
if (!stack.hasTagCompound())
stack.setTagCompound(new NBTTagCompound());
if (!stack.getTagCompound().hasKey("upgrades"))
stack.getTagCompound().setTag("upgrades", new NBTTagCompound());
NBTTagCompound upgrades = stack.getTagCompound().getCompoundTag("upgrades");
upgrades.setInteger(type, level);
return stack;
}
public static NBTTagCompound getDartData(Entity entity) {
if (entity == null)
return new NBTTagCompound();
NBTTagCompound entdat = entity.getEntityData();
if (entdat == null)
return new NBTTagCompound();
NBTTagCompound dartdat = entdat.getCompoundTag("dartcraft");
// getCompoundTag may create a new tag, here we make sure it is also contained
// within entdat.
entdat.setTag("dartcraft", dartdat);
return dartdat;
}
//public static NBTTagCompound getPlayerEquippedComp(EntityPlayer player) {
// if (player == null)
// return new NBTTagCompound();
// ItemStack stack = player.getCurrentEquippedItem();
// NBTTagCompound upgrades = new NBTTagCompound();
// if (stack != null) {
// if (stack.getItem() instanceof ItemForceSword) {
// upgrades = (NBTTagCompound) getUpgradeCompound(stack).copy();
// }
// if (stack.getItem() instanceof ItemPowerSaw) {
// upgrades = (NBTTagCompound)
// SocketHelper.getSocketCompound(stack).copy();
// }
// }
// return upgrades;
//}
}

View File

@ -38,6 +38,7 @@ tile.forcebrick12.name=Light Blue Force Brick
tile.forcebrick13.name=Magenta Force Brick
tile.forcebrick14.name=Orange Force Brick
tile.forcebrick15.name=White Force Brick
tile.forceslab0.name=Black Force Slab
tile.forceslab1.name=Red Force Slab
tile.forceslab2.name=Green Force Slab
@ -55,6 +56,7 @@ tile.forceslab13.name=Magenta Force Slab
tile.forceslab14.name=Orange Force Slab
tile.forceslab15.name=White Force Slab
tile.forceslab16.name=Wooden Force Slab
tile.forcestairs0.name=Black Force Stairs
tile.forcestairs1.name=Red Force Stairs
tile.forcestairs2.name=Green Force Stairs
@ -73,4 +75,27 @@ tile.forcestairs14.name=Orange Force Stairs
tile.forcestairs15.name=White Force Stairs
tile.forcestairs16.name=Wooden Force Stairs
tile.forcetorch0.name=Black Force Torch
tile.forcetorch1.name=Red Force Torch
tile.forcetorch2.name=Green Force Torch
tile.forcetorch3.name=Brown Force Torch
tile.forcetorch4.name=Blue Force Torch
tile.forcetorch5.name=Purple Force Torch
tile.forcetorch6.name=Cyan Force Torch
tile.forcetorch7.name=Light Gray Force Torch
tile.forcetorch8.name=Gray Force Torch
tile.forcetorch9.name=Pink Force Torch
tile.forcetorch10.name=Lime Force Torch
tile.forcetorch11.name=Yellow Force Torch
tile.forcetorch12.name=Light Blue Force Torch
tile.forcetorch13.name=Magenta Force Torch
tile.forcetorch14.name=Orange Force Torch
tile.forcetorch15.name=White Force Torch
tile.forcetorch16.name=Heat Torch
tile.forcetorch17.name=Healing Torch
tile.forcetorch18.name=Bane Torch
tile.forcetorch19.name=Camo Torch
tile.forcetorch20.name=Aspect Torch
tile.forcetorch21.name=Time Torch
itemGroup.dartcraft=Dartcraft

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB