Conflicts:
	src/main/java/techreborn/partSystem/IModPart.java
	src/main/java/techreborn/partSystem/QLib/QModPart.java
	src/main/java/techreborn/partSystem/fmp/FMPModPart.java
	src/main/java/techreborn/partSystem/parts/CablePart.java
	src/main/java/techreborn/partSystem/parts/NullPart.java
This commit is contained in:
Modmuss50 2015-04-24 19:42:33 +01:00
commit d6797868fb
141 changed files with 10649 additions and 7299 deletions

View file

@ -1,13 +1,14 @@
package techreborn.partSystem;
import java.util.ArrayList;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
import java.util.ArrayList;
public interface ICustomHighlight {
ArrayList<AxisAlignedBB> getBoxes(World world, int x, int y, int z, EntityPlayer player);
ArrayList<AxisAlignedBB> getBoxes(World world, int x, int y, int z,
EntityPlayer player);
}

View file

@ -4,8 +4,13 @@
package techreborn.partSystem;
import cpw.mods.fml.relauncher.SideOnly;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.util.List;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.entity.Entity;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@ -16,16 +21,21 @@ import uk.co.qmunity.lib.client.render.RenderHelper;
import java.util.List;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
/**
* This is based of https://github.com/Qmunity/QmunityLib/blob/master/src/main/java/uk/co/qmunity/lib/part/IPart.java
* This is based of
* https://github.com/Qmunity/QmunityLib/blob/master/src/main/java
* /uk/co/qmunity/lib/part/IPart.java
* <p/>
* You should not be implementing this.
*/
public interface IModPart {
/**
* Adds all of this part's collision boxes to the list. These boxes can depend on the entity that's colliding with them.
* Adds all of this part's collision boxes to the list. These boxes can
* depend on the entity that's colliding with them.
*/
public void addCollisionBoxesToList(List<Vecs3dCube> boxes, Entity entity);
@ -34,7 +44,6 @@ public interface IModPart {
*/
public List<Vecs3dCube> getSelectionBoxes();
/**
* Gets this part's occlusion boxes.
*/
@ -48,7 +57,8 @@ public interface IModPart {
/**
* Renders this part statically. A tessellator has alredy started drawing. <br>
* Only called when there's a block/lighting/render update in the chunk this part is in.
* Only called when there's a block/lighting/render update in the chunk this
* part is in.
*/
@SideOnly(Side.CLIENT)
public boolean renderStatic(Vecs3d translation, RenderHelper renderHelper, int pass);
@ -104,7 +114,8 @@ public interface IModPart {
public void tick();
/**
* Called when a block or part has been changed. Can be used for cables to check nearby blocks
* Called when a block or part has been changed. Can be used for cables to
* check nearby blocks
*/
public void nearByChange();

View file

@ -11,18 +11,20 @@ import net.minecraft.world.World;
import techreborn.lib.Location;
import techreborn.lib.vecmath.Vecs3dCube;
public interface IPartProvider {
public String modID();
public void registerPart();
public boolean checkOcclusion(World world, Location location, Vecs3dCube cube);
public boolean checkOcclusion(World world, Location location,
Vecs3dCube cube);
public boolean hasPart(World world, Location location, String name);
public boolean placePart(ItemStack item, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, ModPart modPart);
public boolean placePart(ItemStack item, EntityPlayer player, World world,
int x, int y, int z, int side, float hitX, float hitY, float hitZ,
ModPart modPart);
public boolean isTileFromProvider(TileEntity tileEntity);
}

View file

@ -4,12 +4,10 @@
package techreborn.partSystem;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import techreborn.lib.Location;
/**
* Extend this class to make your multipart
*/
@ -25,21 +23,21 @@ public abstract class ModPart extends TileEntity implements IModPart {
*/
public Location location;
/**
* This is the world
*/
@Override
public World getWorld() {
public World getWorld()
{
return world;
}
/**
* This sets the world
* Don't use this unless you know what you are doing.
* This sets the world Don't use this unless you know what you are doing.
*/
public void setWorld(World world) {
public void setWorld(World world)
{
this.world = world;
setWorldObj(world);
}
@ -48,7 +46,8 @@ public abstract class ModPart extends TileEntity implements IModPart {
* Gets the x position in the world
*/
@Override
public int getX() {
public int getX()
{
return location.getX();
}
@ -56,7 +55,8 @@ public abstract class ModPart extends TileEntity implements IModPart {
* Gets the y position in the world
*/
@Override
public int getY() {
public int getY()
{
return location.getY();
}
@ -64,37 +64,39 @@ public abstract class ModPart extends TileEntity implements IModPart {
* Gets the z position in the world
*/
@Override
public int getZ() {
public int getZ()
{
return location.getZ();
}
/**
* Gets the location of the part
*/
public Location getLocation() {
public Location getLocation()
{
return location;
}
/**
* Sets the x position in the world
*/
public void setLocation(Location location) {
public void setLocation(Location location)
{
this.location = location;
this.xCoord = location.getX();
this.yCoord = location.getY();
this.zCoord = location.getZ();
}
@Override
public World getWorldObj() {
public World getWorldObj()
{
return getWorld();
}
@Override
public void setWorldObj(World p_145834_1_) {
public void setWorldObj(World p_145834_1_)
{
super.setWorldObj(p_145834_1_);
}
}

View file

@ -10,38 +10,54 @@ import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import uk.co.qmunity.lib.ref.Names;
public class ModPartItem extends Item {
ModPart modPart;
public ModPartItem(ModPart part) {
public ModPartItem(ModPart part)
{
modPart = part;
setUnlocalizedName(Names.Unlocalized.Items.MULTIPART);
}
@Override
public boolean onItemUse(ItemStack item, EntityPlayer player, World world, int x, int y, int z, int face, float x_, float y_, float z_) {
if(ModPartRegistry.masterProvider != null){
try {
if (ModPartRegistry.masterProvider.placePart(item, player, world, x, y, z, face, x_, y_, z_, modPart.getClass().newInstance())) {
public boolean onItemUse(ItemStack item, EntityPlayer player, World world,
int x, int y, int z, int face, float x_, float y_, float z_)
{
if (ModPartRegistry.masterProvider != null)
{
try
{
if (ModPartRegistry.masterProvider.placePart(item, player,
world, x, y, z, face, x_, y_, z_, modPart.getClass()
.newInstance()))
{
return true;
}
} catch (InstantiationException e) {
} catch (InstantiationException e)
{
e.printStackTrace();
} catch (IllegalAccessException e) {
} catch (IllegalAccessException e)
{
e.printStackTrace();
}
return false;
}else {
for (IPartProvider partProvider : ModPartRegistry.providers) {
try {
if (partProvider.placePart(item, player, world, x, y, z, face, x_, y_, z_, modPart.getClass().newInstance())) {
} else
{
for (IPartProvider partProvider : ModPartRegistry.providers)
{
try
{
if (partProvider.placePart(item, player, world, x, y, z,
face, x_, y_, z_, modPart.getClass().newInstance()))
{
return true;
}
} catch (InstantiationException e) {
} catch (InstantiationException e)
{
e.printStackTrace();
} catch (IllegalAccessException e) {
} catch (IllegalAccessException e)
{
e.printStackTrace();
}
}
@ -50,11 +66,13 @@ public class ModPartItem extends Item {
}
@Override
public String getUnlocalizedName(ItemStack stack) {
public String getUnlocalizedName(ItemStack stack)
{
return modPart.getName();
}
public ModPart getModPart() {
public ModPart getModPart()
{
return modPart;
}
}

View file

@ -4,16 +4,16 @@
package techreborn.partSystem;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.item.Item;
import techreborn.client.TechRebornCreativeTab;
import techreborn.util.LogHelper;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.minecraft.item.Item;
import techreborn.client.TechRebornCreativeTab;
import techreborn.util.LogHelper;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.registry.GameRegistry;
public class ModPartRegistry {
public static ArrayList<ModPart> parts = new ArrayList<ModPart>();
@ -24,55 +24,78 @@ public class ModPartRegistry {
public static Map<Item, String> itemParts = new HashMap<Item, String>();
public static void registerPart(ModPart iModPart) {
public static void registerPart(ModPart iModPart)
{
parts.add(iModPart);
}
public static void addAllPartsToSystems() {
public static void addAllPartsToSystems()
{
LogHelper.info("Started to load all parts");
for (ModPart modPart : ModPartRegistry.parts) {
Item part = new ModPartItem(modPart).setUnlocalizedName(modPart.getName()).setCreativeTab(TechRebornCreativeTab.instance).setTextureName(modPart.getItemTextureName());
for (ModPart modPart : ModPartRegistry.parts)
{
Item part = new ModPartItem(modPart)
.setUnlocalizedName(modPart.getName())
.setCreativeTab(TechRebornCreativeTab.instance)
.setTextureName(modPart.getItemTextureName());
GameRegistry.registerItem(part, modPart.getName());
itemParts.put(part, modPart.getName());
}
for (IPartProvider iPartProvider : providers) {
for (IPartProvider iPartProvider : providers)
{
iPartProvider.registerPart();
}
}
public static Item getItem(String string) {
for (Map.Entry<Item, String> entry : itemParts.entrySet()) {
if (entry.getValue().equals(string)) {
public static Item getItem(String string)
{
for (Map.Entry<Item, String> entry : itemParts.entrySet())
{
if (entry.getValue().equals(string))
{
return entry.getKey();
}
}
return null;
}
public static void addProvider(String className, String modid) {
if (Loader.isModLoaded(modid) || modid.equals("Minecraft")) {
try {
public static void addProvider(String className, String modid)
{
if (Loader.isModLoaded(modid) || modid.equals("Minecraft"))
{
try
{
IPartProvider iPartProvider = null;
iPartProvider = (IPartProvider) Class.forName(className).newInstance();
iPartProvider = (IPartProvider) Class.forName(className)
.newInstance();
providers.add(iPartProvider);
} catch (ClassNotFoundException e) {
} catch (ClassNotFoundException e)
{
e.printStackTrace();
LogHelper.error("Failed to load " + className + " to the part system!");
} catch (InstantiationException e) {
LogHelper.error("Failed to load " + className
+ " to the part system!");
} catch (InstantiationException e)
{
e.printStackTrace();
LogHelper.error("Failed to load " + className + " to the part system!");
} catch (IllegalAccessException e) {
LogHelper.error("Failed to load " + className
+ " to the part system!");
} catch (IllegalAccessException e)
{
e.printStackTrace();
LogHelper.error("Failed to load " + className + " to the part system!");
LogHelper.error("Failed to load " + className
+ " to the part system!");
}
}
}
//Only use this one if it is a standalone Provider
public static void addProvider(IPartProvider iPartProvider) {
if (Loader.isModLoaded(iPartProvider.modID()) || iPartProvider.modID().equals("Minecraft")) {
// Only use this one if it is a standalone Provider
public static void addProvider(IPartProvider iPartProvider)
{
if (Loader.isModLoaded(iPartProvider.modID())
|| iPartProvider.modID().equals("Minecraft"))
{
providers.add(iPartProvider);
}
}

View file

@ -4,73 +4,96 @@
package techreborn.partSystem;
import java.util.Map;
import net.minecraft.item.Item;
import net.minecraft.world.World;
import techreborn.lib.Location;
import techreborn.lib.vecmath.Vecs3dCube;
import java.util.Map;
public class ModPartUtils {
public static boolean checkOcclusion(World world, Location location, Vecs3dCube cube) {
if (world == null) {
public static boolean checkOcclusion(World world, Location location,
Vecs3dCube cube)
{
if (world == null)
{
return false;
}
IPartProvider partProvider = getPartProvider(world, location);
if (partProvider != null) {
if (partProvider != null)
{
return partProvider.checkOcclusion(world, location, cube);
}
return false;
}
public static boolean checkOcclusion(World world, int x, int y, int z, Vecs3dCube cube) {
public static boolean checkOcclusion(World world, int x, int y, int z,
Vecs3dCube cube)
{
return checkOcclusion(world, new Location(x, y, z), cube);
}
public static boolean checkOcclusionInvert(World world, Location location, Vecs3dCube cube) {
if (world == null) {
public static boolean checkOcclusionInvert(World world, Location location,
Vecs3dCube cube)
{
if (world == null)
{
return false;
}
for (IPartProvider iPartProvider : ModPartRegistry.providers) {
if (!iPartProvider.checkOcclusion(world, location, cube)) {
for (IPartProvider iPartProvider : ModPartRegistry.providers)
{
if (!iPartProvider.checkOcclusion(world, location, cube))
{
return false;
}
}
return false;
}
public static boolean checkOcclusionInvert(World world, int x, int y, int z, Vecs3dCube cube) {
public static boolean checkOcclusionInvert(World world, int x, int y,
int z, Vecs3dCube cube)
{
return checkOcclusionInvert(world, new Location(x, y, z), cube);
}
public static boolean hasPart(World world, Location location, String name) {
for (IPartProvider iPartProvider : ModPartRegistry.providers) {
if (iPartProvider.hasPart(world, location, name)) {
public static boolean hasPart(World world, Location location, String name)
{
for (IPartProvider iPartProvider : ModPartRegistry.providers)
{
if (iPartProvider.hasPart(world, location, name))
{
return true;
}
}
return false;
}
public static boolean hasPart(World world, int x, int y, int z, String name) {
public static boolean hasPart(World world, int x, int y, int z, String name)
{
return hasPart(world, new Location(x, y, z), name);
}
public static Item getItemForPart(String string) {
for (Map.Entry<Item, String> item : ModPartRegistry.itemParts.entrySet()) {
if (item.getValue().equals(string)) {
public static Item getItemForPart(String string)
{
for (Map.Entry<Item, String> item : ModPartRegistry.itemParts
.entrySet())
{
if (item.getValue().equals(string))
{
return item.getKey();
}
}
return null;
}
public static IPartProvider getPartProvider(World world, Location location) {
for (IPartProvider partProvider : ModPartRegistry.providers) {
if (partProvider.isTileFromProvider(world.getTileEntity(location.getX(), location.getY(), location.getZ()))) {
public static IPartProvider getPartProvider(World world, Location location)
{
for (IPartProvider partProvider : ModPartRegistry.providers)
{
if (partProvider.isTileFromProvider(world.getTileEntity(
location.getX(), location.getY(), location.getZ())))
{
return partProvider;
}
}

View file

@ -4,52 +4,59 @@
package techreborn.partSystem.QLib;
import java.util.ArrayList;
import java.util.List;
import techreborn.lib.vecmath.Vecs3d;
import techreborn.lib.vecmath.Vecs3dCube;
import uk.co.qmunity.lib.vec.Vec3d;
import uk.co.qmunity.lib.vec.Vec3dCube;
import java.util.ArrayList;
import java.util.List;
/**
* Created by mark on 09/12/14.
*/
public class ModLib2QLib {
public static Vec3d convert(Vecs3d input) {
public static Vec3d convert(Vecs3d input)
{
return new Vec3d(input.getX(), input.getY(), input.getZ());
}
public static Vec3dCube convert(Vecs3dCube input) {
public static Vec3dCube convert(Vecs3dCube input)
{
return new Vec3dCube(input.toAABB());
}
public static Vecs3d convert(Vec3d input) {
public static Vecs3d convert(Vec3d input)
{
return new Vecs3d(input.getX(), input.getY(), input.getZ());
}
public static Vecs3dCube convert(Vec3dCube input) {
public static Vecs3dCube convert(Vec3dCube input)
{
return new Vecs3dCube(input.toAABB());
}
public static List<Vecs3dCube> convert(List<Vec3dCube> input) {
public static List<Vecs3dCube> convert(List<Vec3dCube> input)
{
List<Vecs3dCube> list = new ArrayList<Vecs3dCube>();
for (Vec3dCube cube : input) {
for (Vec3dCube cube : input)
{
list.add(new Vecs3dCube(cube.toAABB()));
}
return list;
}
//Its got to be called becuase of some weird thing see: https://stackoverflow.com/questions/1998544/method-has-the-same-erasure-as-another-method-in-type
public static List<Vec3dCube> convert2(List<Vecs3dCube> input) {
// Its got to be called becuase of some weird thing see:
// https://stackoverflow.com/questions/1998544/method-has-the-same-erasure-as-another-method-in-type
public static List<Vec3dCube> convert2(List<Vecs3dCube> input)
{
List<Vec3dCube> list = new ArrayList<Vec3dCube>();
for (Vecs3dCube cube : input) {
for (Vecs3dCube cube : input)
{
list.add(new Vec3dCube(cube.toAABB()));
}
return list;
}
}

View file

@ -4,6 +4,9 @@
package techreborn.partSystem.QLib;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.entity.Entity;
import net.minecraft.item.ItemStack;
@ -20,72 +23,83 @@ import uk.co.qmunity.lib.vec.Vec3d;
import uk.co.qmunity.lib.vec.Vec3dCube;
import uk.co.qmunity.lib.vec.Vec3i;
import java.util.ArrayList;
import java.util.List;
public class QModPart extends PartBase implements IPartCollidable, IPartSelectable, IPartRenderPlacement, IPartTicking, IPartUpdateListener {
public class QModPart extends PartBase implements IPartCollidable,
IPartSelectable, IPartRenderPlacement, IPartTicking,
IPartUpdateListener {
ModPart iModPart;
public QModPart(ModPart iModPart) {
public QModPart(ModPart iModPart)
{
this.iModPart = iModPart;
}
@Override
public void setParent(ITilePartHolder parent) {
public void setParent(ITilePartHolder parent)
{
super.setParent(parent);
}
@Override
public String getType() {
public String getType()
{
return iModPart.getName();
}
@Override
public ItemStack getItem() {
public ItemStack getItem()
{
return iModPart.getItem();
}
@Override
public void addCollisionBoxesToList(List<Vec3dCube> boxes, Entity entity) {
public void addCollisionBoxesToList(List<Vec3dCube> boxes, Entity entity)
{
List<Vecs3dCube> cubes = new ArrayList<Vecs3dCube>();
iModPart.addCollisionBoxesToList(cubes, entity);
for (Vecs3dCube cube : cubes) {
for (Vecs3dCube cube : cubes)
{
if (cube != null)
boxes.add(ModLib2QLib.convert(cube));
}
}
@Override
public void renderDynamic(Vec3d translation, double delta, int pass) {
public void renderDynamic(Vec3d translation, double delta, int pass)
{
iModPart.renderDynamic(ModLib2QLib.convert(translation), delta);
}
@Override
public boolean renderStatic(Vec3i translation, RenderHelper renderer, RenderBlocks renderBlocks, int pass) {
return iModPart.renderStatic(new Vecs3d(translation.getX(), translation.getY(), translation.getZ()),renderer , pass);
return iModPart.renderStatic(new Vecs3d(translation.getX(), translation.getY(), translation.getZ()), renderer, pass);
}
@Override
public QMovingObjectPosition rayTrace(Vec3d start, Vec3d end) {
public QMovingObjectPosition rayTrace(Vec3d start, Vec3d end)
{
return RayTracer.instance().rayTraceCubes(this, start, end);
}
@Override
public List<Vec3dCube> getSelectionBoxes() {
public List<Vec3dCube> getSelectionBoxes()
{
return ModLib2QLib.convert2(iModPart.getSelectionBoxes());
}
@Override
public World getWorld() {
public World getWorld()
{
return getParent().getWorld();
}
@Override
public void update() {
if (iModPart.world == null || iModPart.location == null) {
public void update()
{
if (iModPart.world == null || iModPart.location == null)
{
iModPart.setWorld(getWorld());
iModPart.setLocation(new Location(getX(), getY(), getZ()));
}
@ -93,18 +107,22 @@ public class QModPart extends PartBase implements IPartCollidable, IPartSelectab
}
@Override
public void onPartChanged(IPart part) {
public void onPartChanged(IPart part)
{
iModPart.nearByChange();
}
@Override
public void onNeighborBlockChange() {
public void onNeighborBlockChange()
{
iModPart.nearByChange();
}
@Override
public void onNeighborTileChange() {
if (iModPart.world == null || iModPart.location == null) {
public void onNeighborTileChange()
{
if (iModPart.world == null || iModPart.location == null)
{
iModPart.setWorld(getWorld());
iModPart.setLocation(new Location(getX(), getY(), getZ()));
}
@ -112,21 +130,26 @@ public class QModPart extends PartBase implements IPartCollidable, IPartSelectab
}
@Override
public void onAdded() {
if(iModPart.location != null){
public void onAdded()
{
if (iModPart.location != null)
{
iModPart.nearByChange();
iModPart.onAdded();
}
}
@Override
public void onRemoved() {
public void onRemoved()
{
iModPart.onRemoved();
}
@Override
public void onLoaded() {
if (iModPart.world == null || iModPart.location == null) {
public void onLoaded()
{
if (iModPart.world == null || iModPart.location == null)
{
iModPart.setWorld(getWorld());
iModPart.setLocation(new Location(getX(), getY(), getZ()));
}
@ -134,12 +157,14 @@ public class QModPart extends PartBase implements IPartCollidable, IPartSelectab
}
@Override
public void onUnloaded() {
public void onUnloaded()
{
}
@Override
public void onConverted() {
public void onConverted()
{
}
}

View file

@ -4,7 +4,8 @@
package techreborn.partSystem.QLib;
import techreborn.lib.Location;
import java.util.List;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
@ -12,6 +13,7 @@ import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import techreborn.lib.Location;
import techreborn.lib.vecmath.Vecs3dCube;
import techreborn.partSystem.IPartProvider;
import techreborn.partSystem.ModPart;
@ -25,19 +27,22 @@ import uk.co.qmunity.lib.tile.TileMultipart;
import uk.co.qmunity.lib.vec.Vec3dCube;
import uk.co.qmunity.lib.vec.Vec3i;
import java.util.List;
public class QModPartFactory implements IPartFactory, IPartProvider {
@Override
public IPart createPart(String type, boolean client) {
for (ModPart modPart : ModPartRegistry.parts) {
if (modPart.getName().equals(type)) {
try {
public IPart createPart(String type, boolean client)
{
for (ModPart modPart : ModPartRegistry.parts)
{
if (modPart.getName().equals(type))
{
try
{
return new QModPart(modPart.getClass().newInstance());
} catch (InstantiationException e) {
} catch (InstantiationException e)
{
e.printStackTrace();
} catch (IllegalAccessException e) {
} catch (IllegalAccessException e)
{
e.printStackTrace();
}
}
@ -45,58 +50,83 @@ public class QModPartFactory implements IPartFactory, IPartProvider {
return null;
}
@Override
public boolean placePart(ItemStack item, EntityPlayer player, World world, int x, int y, int z, int face, float x_, float y_, float z_, ModPart modPart) {
IPart part = createPart(item, player, world,
new MovingObjectPosition(x, y, z, face, Vec3.createVectorHelper(x + x_, y + y_, z + z_)), modPart);
public boolean placePart(ItemStack item, EntityPlayer player, World world,
int x, int y, int z, int face, float x_, float y_, float z_,
ModPart modPart)
{
IPart part = createPart(
item,
player,
world,
new MovingObjectPosition(x, y, z, face, Vec3
.createVectorHelper(x + x_, y + y_, z + z_)), modPart);
if (part == null)
return false;
ForgeDirection dir = ForgeDirection.getOrientation(face);
return MultipartCompatibility.placePartInWorld(part, world, new Vec3i(x, y, z), dir, player, item);
return MultipartCompatibility.placePartInWorld(part, world, new Vec3i(
x, y, z), dir, player, item);
}
@Override
public boolean isTileFromProvider(TileEntity tileEntity) {
public boolean isTileFromProvider(TileEntity tileEntity)
{
return tileEntity instanceof TileMultipart;
}
public String getCreatedPartType(ItemStack item, EntityPlayer player, World world, MovingObjectPosition mop, ModPart modPart) {
public String getCreatedPartType(ItemStack item, EntityPlayer player,
World world, MovingObjectPosition mop, ModPart modPart)
{
return modPart.getName();
}
public IPart createPart(ItemStack item, EntityPlayer player, World world, MovingObjectPosition mop, ModPart modPart) {
public IPart createPart(ItemStack item, EntityPlayer player, World world,
MovingObjectPosition mop, ModPart modPart)
{
return PartRegistry.createPart(getCreatedPartType(item, player, world, mop, modPart), world.isRemote);
return PartRegistry.createPart(
getCreatedPartType(item, player, world, mop, modPart),
world.isRemote);
}
@Override
public String modID() {
public String modID()
{
return QLModInfo.MODID;
}
@Override
public void registerPart() {
public void registerPart()
{
PartRegistry.registerFactory(new QModPartFactory());
}
@Override
public boolean checkOcclusion(World world, Location location, Vecs3dCube cube) {
return MultipartCompatibility.checkOcclusion(world, location.x, location.y, location.z, new Vec3dCube(cube.toAABB()));
public boolean checkOcclusion(World world, Location location,
Vecs3dCube cube)
{
return MultipartCompatibility.checkOcclusion(world, location.x,
location.y, location.z, new Vec3dCube(cube.toAABB()));
}
@Override
public boolean hasPart(World world, Location location, String name) {
TileEntity tileEntity = world.getTileEntity(location.getX(), location.getY(), location.getZ());
if (tileEntity instanceof TileMultipart) {
public boolean hasPart(World world, Location location, String name)
{
TileEntity tileEntity = world.getTileEntity(location.getX(),
location.getY(), location.getZ());
if (tileEntity instanceof TileMultipart)
{
TileMultipart mp = (TileMultipart) tileEntity;
boolean ret = false;
List<IPart> t = mp.getParts();
for (IPart p : t) {
if (ret == false) {
if (p.getType().equals(name)) {
for (IPart p : t)
{
if (ret == false)
{
if (p.getType().equals(name))
{
ret = true;
}
}

View file

@ -4,6 +4,9 @@
package techreborn.partSystem.block;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
@ -21,20 +24,18 @@ import techreborn.partSystem.ICustomHighlight;
import techreborn.partSystem.IModPart;
import techreborn.partSystem.ModPart;
import java.util.ArrayList;
import java.util.List;
/**
* Created by mark on 10/12/14.
*/
public class BlockModPart extends BlockContainer implements ICustomHighlight {
public BlockModPart(Material met) {
public BlockModPart(Material met)
{
super(met);
}
public static TileEntityModPart get(IBlockAccess world, int x, int y, int z) {
public static TileEntityModPart get(IBlockAccess world, int x, int y, int z)
{
TileEntity te = world.getTileEntity(x, y, z);
if (te == null)
@ -45,13 +46,17 @@ public class BlockModPart extends BlockContainer implements ICustomHighlight {
}
@Override
public TileEntity createNewTileEntity(World world, int i) {
public TileEntity createNewTileEntity(World world, int i)
{
return new TileEntityModPart();
}
@SuppressWarnings({"rawtypes", "unchecked"})
@SuppressWarnings(
{ "rawtypes", "unchecked" })
@Override
public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB bounds, List l, Entity entity) {
public void addCollisionBoxesToList(World world, int x, int y, int z,
AxisAlignedBB bounds, List l, Entity entity)
{
TileEntityModPart te = get(world, x, y, z);
if (te == null)
return;
@ -63,30 +68,36 @@ public class BlockModPart extends BlockContainer implements ICustomHighlight {
}
@Override
public boolean isOpaqueCube() {
public boolean isOpaqueCube()
{
return false;
}
@Override
public int getRenderType() {
public int getRenderType()
{
return -1;
}
@Override
//TODO move to array list
public ArrayList<AxisAlignedBB> getBoxes(World world, int x, int y, int z, EntityPlayer player) {
// TODO move to array list
public ArrayList<AxisAlignedBB> getBoxes(World world, int x, int y, int z,
EntityPlayer player)
{
TileEntityModPart te = get(world, x, y, z);
if (te == null)
return null;
List<Vecs3dCube> boxes = new ArrayList<Vecs3dCube>();
ArrayList<AxisAlignedBB> list = new ArrayList<AxisAlignedBB>();
if (!te.getParts().isEmpty()) {
if (!te.getParts().isEmpty())
{
for (ModPart modPart : te.getParts())
boxes.addAll(modPart.getSelectionBoxes());
for (int i = 0; i < boxes.size(); i++) {
for (int i = 0; i < boxes.size(); i++)
{
Vecs3dCube cube = boxes.get(i);
list.add(cube.toAABB());
}
@ -95,27 +106,40 @@ public class BlockModPart extends BlockContainer implements ICustomHighlight {
return list;
}
public void onNeighborBlockChange(World world, int x, int y, int z, Block block) {
for (ModPart part : get(world, x, y, z).getParts()) {
public void onNeighborBlockChange(World world, int x, int y, int z,
Block block)
{
for (ModPart part : get(world, x, y, z).getParts())
{
part.nearByChange();
}
}
@Override
public MovingObjectPosition collisionRayTrace(World wrd, int x, int y, int z, Vec3 origin, Vec3 direction) {
public MovingObjectPosition collisionRayTrace(World wrd, int x, int y,
int z, Vec3 origin, Vec3 direction)
{
ArrayList<AxisAlignedBB> aabbs = getBoxes(wrd, x, y, z, null);
MovingObjectPosition closest = null;
for (AxisAlignedBB aabb : aabbs) {
MovingObjectPosition mop = aabb.getOffsetBoundingBox(x, y, z).calculateIntercept(origin, direction);
if (mop != null) {
if (closest != null && mop.hitVec.distanceTo(origin) < closest.hitVec.distanceTo(origin)) {
for (AxisAlignedBB aabb : aabbs)
{
MovingObjectPosition mop = aabb.getOffsetBoundingBox(x, y, z)
.calculateIntercept(origin, direction);
if (mop != null)
{
if (closest != null
&& mop.hitVec.distanceTo(origin) < closest.hitVec
.distanceTo(origin))
{
closest = mop;
} else {
} else
{
closest = mop;
}
}
}
if (closest != null) {
if (closest != null)
{
closest.blockX = x;
closest.blockY = y;
closest.blockZ = z;
@ -124,27 +148,36 @@ public class BlockModPart extends BlockContainer implements ICustomHighlight {
}
@Override
public void onBlockAdded(World world, int x, int y, int z) {
for (ModPart part : get(world, x, y, z).getParts()) {
public void onBlockAdded(World world, int x, int y, int z)
{
for (ModPart part : get(world, x, y, z).getParts())
{
part.onAdded();
}
super.onBlockAdded(world, x, y, z);
}
@Override
public void breakBlock(World world, int x, int y, int z, Block oldid, int oldmeta) {
for (ModPart part : get(world, x, y, z).getParts()) {
public void breakBlock(World world, int x, int y, int z, Block oldid,
int oldmeta)
{
for (ModPart part : get(world, x, y, z).getParts())
{
part.onRemoved();
}
super.breakBlock(world, x, y, z, oldid, oldmeta);
}
@Override
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) {
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z,
int metadata, int fortune)
{
ArrayList<ItemStack> l = new ArrayList<ItemStack>();
TileEntityModPart te = get(world, x, y, z);
if (te != null) {
for (IModPart p : te.getParts()) {
if (te != null)
{
for (IModPart p : te.getParts())
{
ItemStack item = p.getItem();
if (item != null)
l.add(item);

View file

@ -4,22 +4,26 @@
package techreborn.partSystem.block;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import org.lwjgl.opengl.GL11;
import techreborn.lib.vecmath.Vecs3d;
import techreborn.partSystem.ModPart;
public class RenderModPart extends TileEntitySpecialRenderer {
@Override
public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float delta) {
public void renderTileEntityAt(TileEntity tileEntity, double x, double y,
double z, float delta)
{
TileEntityModPart te = (TileEntityModPart) tileEntity;
GL11.glPushMatrix();
GL11.glTranslated(x, y, z);
{
for (ModPart modPart : te.getParts()) {
for (ModPart modPart : te.getParts())
{
modPart.renderDynamic(new Vecs3d(0, 0, 0), delta);
}
}

View file

@ -4,6 +4,11 @@
package techreborn.partSystem.block;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.minecraft.entity.Entity;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
@ -19,89 +24,94 @@ import techreborn.partSystem.ModPart;
import techreborn.partSystem.ModPartRegistry;
import techreborn.partSystem.parts.NullPart;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TileEntityModPart extends TileEntity {
private Map<String, ModPart> parts = new HashMap<String, ModPart>();
public void addCollisionBoxesToList(List<Vecs3dCube> l, AxisAlignedBB bounds, Entity entity) {
public void addCollisionBoxesToList(List<Vecs3dCube> l,
AxisAlignedBB bounds, Entity entity)
{
if (getParts().size() == 0)
addPart(new NullPart());
List<Vecs3dCube> boxes2 = new ArrayList<Vecs3dCube>();
for (ModPart mp : getParts()) {
for (ModPart mp : getParts())
{
List<Vecs3dCube> boxes = new ArrayList<Vecs3dCube>();
mp.addCollisionBoxesToList(boxes, entity);
for (int i = 0; i < boxes.size(); i++) {
for (int i = 0; i < boxes.size(); i++)
{
Vecs3dCube cube = boxes.get(i).clone();
cube.add(getX(), getY(), getZ());
boxes2.add(cube);
}
}
for (Vecs3dCube c : boxes2) {
//if (c.toAABB().intersectsWith(bounds))
for (Vecs3dCube c : boxes2)
{
// if (c.toAABB().intersectsWith(bounds))
l.add(c);
}
}
public List<Vecs3dCube> getOcclusionBoxes() {
public List<Vecs3dCube> getOcclusionBoxes()
{
List<Vecs3dCube> boxes = new ArrayList<Vecs3dCube>();
for (ModPart mp : getParts()) {
for (ModPart mp : getParts())
{
boxes.addAll(mp.getOcclusionBoxes());
}
return boxes;
}
@Override
public AxisAlignedBB getRenderBoundingBox() {
public AxisAlignedBB getRenderBoundingBox()
{
return AxisAlignedBB.getBoundingBox(xCoord, yCoord, zCoord, xCoord + 1, yCoord + 1, zCoord + 1);
return AxisAlignedBB.getBoundingBox(xCoord, yCoord, zCoord, xCoord + 1,
yCoord + 1, zCoord + 1);
}
public World getWorld() {
public World getWorld()
{
return getWorldObj();
}
public int getX() {
public int getX()
{
return xCoord;
}
public int getY() {
public int getY()
{
return yCoord;
}
public int getZ() {
public int getZ()
{
return zCoord;
}
@Override
public void updateEntity() {
if (parts.isEmpty()) {
public void updateEntity()
{
if (parts.isEmpty())
{
worldObj.setBlockToAir(xCoord, yCoord, zCoord);
}
for (ModPart mp : getParts()) {
if (mp.world != null && mp.location != null) {
for (ModPart mp : getParts())
{
if (mp.world != null && mp.location != null)
{
mp.tick();
}
}
}
@Override
public void writeToNBT(NBTTagCompound tag) {
public void writeToNBT(NBTTagCompound tag)
{
super.writeToNBT(tag);
@ -111,23 +121,29 @@ public class TileEntityModPart extends TileEntity {
}
@Override
public void readFromNBT(NBTTagCompound tag) {
public void readFromNBT(NBTTagCompound tag)
{
super.readFromNBT(tag);
NBTTagList l = tag.getTagList("parts", new NBTTagCompound().getId());
try {
try
{
readParts(l);
} catch (IllegalAccessException e) {
} catch (IllegalAccessException e)
{
e.printStackTrace();
} catch (InstantiationException e) {
} catch (InstantiationException e)
{
e.printStackTrace();
}
}
private void writeParts(NBTTagList l, boolean update) {
private void writeParts(NBTTagList l, boolean update)
{
for (ModPart p : getParts()) {
for (ModPart p : getParts())
{
String id = getIdentifier(p);
NBTTagCompound tag = new NBTTagCompound();
@ -142,16 +158,22 @@ public class TileEntityModPart extends TileEntity {
}
}
private void readParts(NBTTagList l) throws IllegalAccessException, InstantiationException {
private void readParts(NBTTagList l) throws IllegalAccessException,
InstantiationException
{
for (int i = 0; i < l.tagCount(); i++) {
for (int i = 0; i < l.tagCount(); i++)
{
NBTTagCompound tag = l.getCompoundTagAt(i);
String id = tag.getString("id");
ModPart p = getPart(id);
if (p == null) {
for (ModPart modPart : ModPartRegistry.parts) {
if (modPart.getName().equals(id)) {
if (p == null)
{
for (ModPart modPart : ModPartRegistry.parts)
{
if (modPart.getName().equals(id))
{
p = modPart.getClass().newInstance();
}
}
@ -165,20 +187,25 @@ public class TileEntityModPart extends TileEntity {
}
}
public void addPart(ModPart modPart) {
try {
public void addPart(ModPart modPart)
{
try
{
ModPart newPart = modPart.getClass().newInstance();
newPart.setWorld(getWorldObj());
newPart.setLocation(new Location(xCoord, yCoord, zCoord));
parts.put(newPart.getName(), newPart);
} catch (InstantiationException e) {
} catch (InstantiationException e)
{
e.printStackTrace();
} catch (IllegalAccessException e) {
} catch (IllegalAccessException e)
{
e.printStackTrace();
}
}
private ModPart getPart(String id) {
private ModPart getPart(String id)
{
for (String s : parts.keySet())
if (s.equals(id))
return parts.get(s);
@ -186,7 +213,8 @@ public class TileEntityModPart extends TileEntity {
return null;
}
private String getIdentifier(ModPart part) {
private String getIdentifier(ModPart part)
{
for (String s : parts.keySet())
if (parts.get(s).equals(part))
return s;
@ -194,48 +222,56 @@ public class TileEntityModPart extends TileEntity {
return null;
}
@Override
public Packet getDescriptionPacket() {
public Packet getDescriptionPacket()
{
NBTTagCompound tag = new NBTTagCompound();
writeToNBT(tag);
return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 0, tag);
}
@Override
public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) {
public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt)
{
readFromNBT(pkt.func_148857_g());
}
public List<ModPart> getParts() {
public List<ModPart> getParts()
{
List<ModPart> parts = new ArrayList<ModPart>();
for (String s : this.parts.keySet()) {
for (String s : this.parts.keySet())
{
ModPart p = this.parts.get(s);
parts.add(p);
}
return parts;
}
public List<String> getPartsByName() {
public List<String> getPartsByName()
{
List<String> parts = new ArrayList<String>();
for (String s : this.parts.keySet()) {
for (String s : this.parts.keySet())
{
parts.add(s);
}
return parts;
}
public boolean canAddPart(ModPart modpart) {
public boolean canAddPart(ModPart modpart)
{
List<Vecs3dCube> cubes = new ArrayList<Vecs3dCube>();
modpart.addCollisionBoxesToList(cubes, null);
for (Vecs3dCube c : cubes)
if (c != null && !getWorld().checkNoEntityCollision(c.clone().add(getX(), getY(), getZ()).toAABB()))
if (c != null
&& !getWorld().checkNoEntityCollision(
c.clone().add(getX(), getY(), getZ()).toAABB()))
return false;
List<Vecs3dCube> l = getOcclusionBoxes();
for (Vecs3dCube b : modpart.getOcclusionBoxes())
for (Vecs3dCube c : l)
if (c != null && b != null && b.toAABB().intersectsWith(c.toAABB()))
if (c != null && b != null
&& b.toAABB().intersectsWith(c.toAABB()))
return false;
return true;
}

View file

@ -4,12 +4,6 @@
package techreborn.partSystem.block;
import cpw.mods.fml.client.registry.ClientRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
import techreborn.lib.Location;
import techreborn.lib.vecmath.Vecs3dCube;
import techreborn.partSystem.IPartProvider;
import techreborn.partSystem.ModPart;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
@ -18,6 +12,12 @@ import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import techreborn.lib.Location;
import techreborn.lib.vecmath.Vecs3dCube;
import techreborn.partSystem.IPartProvider;
import techreborn.partSystem.ModPart;
import cpw.mods.fml.client.registry.ClientRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
/**
* Created by mark on 10/12/14.
@ -26,36 +26,49 @@ public class WorldProvider implements IPartProvider {
Block blockModPart;
@Override
public String modID() {
public String modID()
{
return "Minecraft";
}
@Override
public void registerPart() {
//Loads all of the items
public void registerPart()
{
// Loads all of the items
blockModPart = new BlockModPart(Material.ground).setBlockName("modPartBlock");
blockModPart = new BlockModPart(Material.ground)
.setBlockName("modPartBlock");
GameRegistry.registerBlock(blockModPart, "modPartBlock");
//registers the tile and renderer
GameRegistry.registerTileEntity(TileEntityModPart.class, "TileEntityModPart");
// registers the tile and renderer
GameRegistry.registerTileEntity(TileEntityModPart.class,
"TileEntityModPart");
}
public void clientRegister() {
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityModPart.class, new RenderModPart());
public void clientRegister()
{
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityModPart.class,
new RenderModPart());
}
@Override
public boolean checkOcclusion(World world, Location location, Vecs3dCube cube) {
public boolean checkOcclusion(World world, Location location,
Vecs3dCube cube)
{
return true;
}
@Override
public boolean hasPart(World world, Location location, String name) {
TileEntity tileEntity = world.getTileEntity(location.getX(), location.getY(), location.getZ());
if (tileEntity instanceof TileEntityModPart) {
for (ModPart part : ((TileEntityModPart) tileEntity).getParts()) {
if (part.getName().equals(name)) {
public boolean hasPart(World world, Location location, String name)
{
TileEntity tileEntity = world.getTileEntity(location.getX(),
location.getY(), location.getZ());
if (tileEntity instanceof TileEntityModPart)
{
for (ModPart part : ((TileEntityModPart) tileEntity).getParts())
{
if (part.getName().equals(name))
{
return true;
}
}
@ -64,27 +77,47 @@ public class WorldProvider implements IPartProvider {
}
@Override
public boolean placePart(ItemStack item, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, ModPart modPart) {
public boolean placePart(ItemStack item, EntityPlayer player, World world,
int x, int y, int z, int side, float hitX, float hitY, float hitZ,
ModPart modPart)
{
ForgeDirection forgeDirection = ForgeDirection.getOrientation(side);
if (world.getBlock(x + forgeDirection.offsetX, y + forgeDirection.offsetY, z + forgeDirection.offsetZ) == Blocks.air) {
if (world.getBlock(x + forgeDirection.offsetX, y
+ forgeDirection.offsetY, z + forgeDirection.offsetZ) == Blocks.air)
{
TileEntityModPart modPart1;
world.setBlock(x + forgeDirection.offsetX, y + forgeDirection.offsetY, z + forgeDirection.offsetZ, blockModPart);
modPart1 = (TileEntityModPart) world.getTileEntity(x + forgeDirection.offsetX, y + forgeDirection.offsetY, z + forgeDirection.offsetZ);
//if(modPart1.canAddPart(modPart)){
modPart1.addPart(modPart);
return true;
//}
world.setBlock(x + forgeDirection.offsetX, y
+ forgeDirection.offsetY, z + forgeDirection.offsetZ,
blockModPart);
modPart1 = (TileEntityModPart) world.getTileEntity(x
+ forgeDirection.offsetX, y + forgeDirection.offsetY, z
+ forgeDirection.offsetZ);
// if(modPart1.canAddPart(modPart)){
modPart1.addPart(modPart);
return true;
// }
}
//this adds a part to a block
if (world.getBlock(x, y, z) == blockModPart) {
TileEntityModPart tileEntityModPart = (TileEntityModPart) world.getTileEntity(x + forgeDirection.offsetX, y + forgeDirection.offsetY, z + forgeDirection.offsetZ);
if (!tileEntityModPart.getPartsByName().contains(modPart.getName()) && tileEntityModPart.canAddPart(modPart))
// this adds a part to a block
if (world.getBlock(x, y, z) == blockModPart)
{
TileEntityModPart tileEntityModPart = (TileEntityModPart) world
.getTileEntity(x + forgeDirection.offsetX, y
+ forgeDirection.offsetY, z
+ forgeDirection.offsetZ);
if (!tileEntityModPart.getPartsByName().contains(modPart.getName())
&& tileEntityModPart.canAddPart(modPart))
tileEntityModPart.addPart(modPart);
return true;
}
if (world.getBlock(x + forgeDirection.offsetX, y + forgeDirection.offsetY, z + forgeDirection.offsetZ) == blockModPart) {
TileEntityModPart tileEntityModPart = (TileEntityModPart) world.getTileEntity(x + forgeDirection.offsetX, y + forgeDirection.offsetY, z + forgeDirection.offsetZ);
if (!tileEntityModPart.getPartsByName().contains(modPart.getName()) && tileEntityModPart.canAddPart(modPart))
if (world.getBlock(x + forgeDirection.offsetX, y
+ forgeDirection.offsetY, z + forgeDirection.offsetZ) == blockModPart)
{
TileEntityModPart tileEntityModPart = (TileEntityModPart) world
.getTileEntity(x + forgeDirection.offsetX, y
+ forgeDirection.offsetY, z
+ forgeDirection.offsetZ);
if (!tileEntityModPart.getPartsByName().contains(modPart.getName())
&& tileEntityModPart.canAddPart(modPart))
tileEntityModPart.addPart(modPart);
return true;
}
@ -92,7 +125,8 @@ public class WorldProvider implements IPartProvider {
}
@Override
public boolean isTileFromProvider(TileEntity tileEntity) {
public boolean isTileFromProvider(TileEntity tileEntity)
{
return tileEntity instanceof TileEntityModPart;
}
}

View file

@ -1,8 +1,5 @@
package techreborn.partSystem.client;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.renderer.Tessellator;
@ -13,14 +10,21 @@ import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraftforge.client.event.RenderWorldLastEvent;
import net.minecraftforge.common.util.ForgeDirection;
import org.lwjgl.opengl.GL11;
import techreborn.lib.Location;
import techreborn.lib.vecmath.Vecs3d;
import techreborn.partSystem.IModPart;
import techreborn.partSystem.ModPartItem;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
/**
* This is based of https://github.com/Qmunity/QmunityLib/blob/master/src%2Fmain%2Fjava%2Fuk%2Fco%2Fqmunity%2Flib%2Fclient%2Frender%2FRenderPartPlacement.java
* This is based of
* https://github.com/Qmunity/QmunityLib/blob/master/src%2Fmain%
* 2Fjava%2Fuk%2Fco%2Fqmunity%2Flib%2Fclient%2Frender%2FRenderPartPlacement.java
* <p/>
* You should go check them out!
*/
@ -31,24 +35,30 @@ public class PartPlacementRenderer {
private int width = 0, height = 0;
@SubscribeEvent
public void onRenderTick(RenderWorldLastEvent event) {
public void onRenderTick(RenderWorldLastEvent event)
{
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
ItemStack item = player.getCurrentEquippedItem();
if (item == null)
return;
if (!(item.getItem() instanceof ModPartItem))
return;
if (Minecraft.getMinecraft().gameSettings.hideGUI && Minecraft.getMinecraft().currentScreen == null)
if (Minecraft.getMinecraft().gameSettings.hideGUI
&& Minecraft.getMinecraft().currentScreen == null)
return;
MovingObjectPosition mop = player.rayTrace(player.capabilities.isCreativeMode ? 5 : 4, 0);
if (mop == null || mop.typeOfHit != MovingObjectPosition.MovingObjectType.BLOCK)
MovingObjectPosition mop = player.rayTrace(
player.capabilities.isCreativeMode ? 5 : 4, 0);
if (mop == null
|| mop.typeOfHit != MovingObjectPosition.MovingObjectType.BLOCK)
return;
IModPart part = ((ModPartItem) item.getItem()).getModPart();
if (part == null)
return;
ForgeDirection faceHit = ForgeDirection.getOrientation(mop.sideHit);
Location location = new Location(mop.blockX, mop.blockY, mop.blockZ);
if (fb == null || width != Minecraft.getMinecraft().displayWidth || height != Minecraft.getMinecraft().displayHeight) {
if (fb == null || width != Minecraft.getMinecraft().displayWidth
|| height != Minecraft.getMinecraft().displayHeight)
{
width = Minecraft.getMinecraft().displayWidth;
height = Minecraft.getMinecraft().displayHeight;
fb = new Framebuffer(width, height, true);
@ -61,24 +71,30 @@ public class PartPlacementRenderer {
{
GL11.glLoadIdentity();
fb.bindFramebuffer(true);
GL11.glClear(GL11.GL_STENCIL_BUFFER_BIT | GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
GL11.glClear(GL11.GL_STENCIL_BUFFER_BIT
| GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();
GL11.glClearColor(0, 0, 0, 0);
net.minecraft.client.renderer.RenderHelper.enableStandardItemLighting();
net.minecraft.client.renderer.RenderHelper
.enableStandardItemLighting();
GL11.glPushMatrix();
{
Vec3 playerPos = player.getPosition(event.partialTicks);
double x = location.getX() - playerPos.xCoord + faceHit.offsetX;
double y = location.getY() - playerPos.yCoord + faceHit.offsetY;
double z = location.getZ() - playerPos.zCoord + faceHit.offsetZ;
double x = location.getX() - playerPos.xCoord
+ faceHit.offsetX;
double y = location.getY() - playerPos.yCoord
+ faceHit.offsetY;
double z = location.getZ() - playerPos.zCoord
+ faceHit.offsetZ;
GL11.glRotated(player.rotationPitch, 1, 0, 0);
GL11.glRotated(player.rotationYaw - 180, 0, 1, 0);
GL11.glTranslated(x, y, z);
part.renderDynamic(new Vecs3d(0, 0, 0), event.partialTicks);
}
GL11.glPopMatrix();
net.minecraft.client.renderer.RenderHelper.disableStandardItemLighting();
net.minecraft.client.renderer.RenderHelper
.disableStandardItemLighting();
fb.unbindFramebuffer();
}
GL11.glPopMatrix();
@ -86,11 +102,14 @@ public class PartPlacementRenderer {
GL11.glPushMatrix();
{
Minecraft mc = Minecraft.getMinecraft();
ScaledResolution scaledresolution = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
ScaledResolution scaledresolution = new ScaledResolution(mc,
mc.displayWidth, mc.displayHeight);
GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, scaledresolution.getScaledWidth_double(), scaledresolution.getScaledHeight_double(), 0, 0.1, 10000D);
GL11.glOrtho(0, scaledresolution.getScaledWidth_double(),
scaledresolution.getScaledHeight_double(), 0, 0.1,
10000D);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();
GL11.glTranslatef(0.0F, 0.0F, -2000.0F);
@ -98,7 +117,8 @@ public class PartPlacementRenderer {
{
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA,
GL11.GL_ONE_MINUS_SRC_ALPHA);
Tessellator tessellator = Tessellator.instance;
int w = scaledresolution.getScaledWidth();
int h = scaledresolution.getScaledHeight();

View file

@ -4,38 +4,44 @@
package techreborn.partSystem.fmp;
import java.util.List;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import techreborn.lib.Location;
import techreborn.lib.vecmath.Vecs3dCube;
import techreborn.partSystem.IPartProvider;
import techreborn.partSystem.ModPart;
import techreborn.partSystem.ModPartRegistry;
import codechicken.lib.vec.BlockCoord;
import codechicken.lib.vec.Cuboid6;
import codechicken.multipart.MultiPartRegistry;
import codechicken.multipart.NormallyOccludedPart;
import codechicken.multipart.TMultiPart;
import codechicken.multipart.TileMultipart;
import techreborn.lib.Location;
import techreborn.lib.vecmath.Vecs3dCube;
import techreborn.partSystem.IPartProvider;
import techreborn.partSystem.ModPart;
import techreborn.partSystem.ModPartRegistry;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import java.util.List;
/**
* Created by mark on 09/12/14.
*/
public class FMPFactory implements MultiPartRegistry.IPartFactory, IPartProvider {
public class FMPFactory implements MultiPartRegistry.IPartFactory,
IPartProvider {
@Override
public TMultiPart createPart(String type, boolean client) {
for (ModPart modPart : ModPartRegistry.parts) {
if (modPart.getName().equals(type)) {
try {
public TMultiPart createPart(String type, boolean client)
{
for (ModPart modPart : ModPartRegistry.parts)
{
if (modPart.getName().equals(type))
{
try
{
return new FMPModPart(modPart.getClass().newInstance());
} catch (InstantiationException e) {
} catch (InstantiationException e)
{
e.printStackTrace();
} catch (IllegalAccessException e) {
} catch (IllegalAccessException e)
{
e.printStackTrace();
}
}
@ -43,45 +49,65 @@ public class FMPFactory implements MultiPartRegistry.IPartFactory, IPartProvider
return null;
}
public boolean placePart(ItemStack item, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, ModPart modPart) {
return new FakeFMPPlacerItem(modPart).onItemUse(item, player, world, x, y, z, side, hitX, hitY, hitZ);
public boolean placePart(ItemStack item, EntityPlayer player, World world,
int x, int y, int z, int side, float hitX, float hitY, float hitZ,
ModPart modPart)
{
return new FakeFMPPlacerItem(modPart).onItemUse(item, player, world, x,
y, z, side, hitX, hitY, hitZ);
}
@Override
public boolean isTileFromProvider(TileEntity tileEntity) {
public boolean isTileFromProvider(TileEntity tileEntity)
{
return tileEntity instanceof TileMultipart;
}
@Override
public String modID() {
public String modID()
{
return "ForgeMultipart";
}
@Override
public void registerPart() {
for (ModPart modPart : ModPartRegistry.parts) {
MultiPartRegistry.registerParts(new FMPFactory(), new String[]{modPart.getName()});
public void registerPart()
{
for (ModPart modPart : ModPartRegistry.parts)
{
MultiPartRegistry.registerParts(new FMPFactory(), new String[]
{ modPart.getName() });
}
}
@Override
public boolean checkOcclusion(World world, Location location, Vecs3dCube cube) {
codechicken.multipart.TileMultipart tmp = codechicken.multipart.TileMultipart.getOrConvertTile(world, new BlockCoord(location.getX(), location.getY(), location.getZ()));
public boolean checkOcclusion(World world, Location location,
Vecs3dCube cube)
{
codechicken.multipart.TileMultipart tmp = codechicken.multipart.TileMultipart
.getOrConvertTile(world, new BlockCoord(location.getX(),
location.getY(), location.getZ()));
if (tmp == null)
return false;
return !tmp.occlusionTest(tmp.partList(), new NormallyOccludedPart(new Cuboid6(cube.toAABB())));
return !tmp.occlusionTest(tmp.partList(), new NormallyOccludedPart(
new Cuboid6(cube.toAABB())));
}
@Override
public boolean hasPart(World world, Location location, String name) {
TileEntity tileEntity = world.getTileEntity(location.getX(), location.getY(), location.getZ());
if (tileEntity instanceof TileMultipart) {
public boolean hasPart(World world, Location location, String name)
{
TileEntity tileEntity = world.getTileEntity(location.getX(),
location.getY(), location.getZ());
if (tileEntity instanceof TileMultipart)
{
TileMultipart mp = (TileMultipart) tileEntity;
boolean ret = false;
List<TMultiPart> t = mp.jPartList();
for (TMultiPart p : t) {
if (ret == false) {
if (p.getType().equals(name)) {
for (TMultiPart p : t)
{
if (ret == false)
{
if (p.getType().equals(name))
{
ret = true;
}
}

View file

@ -4,7 +4,17 @@
package techreborn.partSystem.fmp;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.entity.Entity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
import techreborn.lib.Location;
import techreborn.lib.vecmath.Vecs3d;
import techreborn.lib.vecmath.Vecs3dCube;
import techreborn.partSystem.ModPart;
import codechicken.lib.raytracer.IndexedCuboid6;
import codechicken.lib.vec.Cuboid6;
import codechicken.lib.vec.Vector3;
@ -25,25 +35,26 @@ import techreborn.lib.vecmath.Vecs3dCube;
import techreborn.partSystem.ModPart;
import uk.co.qmunity.lib.client.render.RenderHelper;
import java.util.ArrayList;
import java.util.List;
public class FMPModPart extends TMultiPart implements TSlottedPart, JNormalOcclusion, ISidedHollowConnect {
public class FMPModPart extends TMultiPart implements TSlottedPart,
JNormalOcclusion, ISidedHollowConnect {
ModPart iModPart;
public FMPModPart(ModPart iModPart) {
public FMPModPart(ModPart iModPart)
{
this.iModPart = iModPart;
}
@Override
public int getHollowSize(int i) {
public int getHollowSize(int i)
{
return 0;
}
@Override
public Iterable<Cuboid6> getOcclusionBoxes() {
public Iterable<Cuboid6> getOcclusionBoxes()
{
List<Cuboid6> cubes = new ArrayList<Cuboid6>();
for (Vecs3dCube c : iModPart.getOcclusionBoxes())
cubes.add(new Cuboid6(c.toAABB()));
@ -51,45 +62,53 @@ public class FMPModPart extends TMultiPart implements TSlottedPart, JNormalOcclu
}
@Override
public boolean occlusionTest(TMultiPart npart) {
public boolean occlusionTest(TMultiPart npart)
{
return NormalOcclusionTest.apply(this, npart);
}
public void addCollisionBoxesToList(List<Vecs3dCube> l, AxisAlignedBB bounds, Entity entity) {
public void addCollisionBoxesToList(List<Vecs3dCube> l,
AxisAlignedBB bounds, Entity entity)
{
List<Vecs3dCube> boxes = new ArrayList<Vecs3dCube>();
List<Vecs3dCube> boxes_ = new ArrayList<Vecs3dCube>();
iModPart.addCollisionBoxesToList(boxes_, entity);
for (Vecs3dCube c : boxes_) {
for (Vecs3dCube c : boxes_)
{
Vecs3dCube cube = c.clone();
cube.add(getX(), getY(), getZ());
boxes.add(cube);
}
boxes_.clear();
for (Vecs3dCube c : boxes) {
for (Vecs3dCube c : boxes)
{
if (c.toAABB().intersectsWith(bounds))
l.add(c);
}
}
@Override
public Iterable<Cuboid6> getCollisionBoxes() {
public Iterable<Cuboid6> getCollisionBoxes()
{
List<Cuboid6> cubes = new ArrayList<Cuboid6>();
List<Vecs3dCube> boxes = new ArrayList<Vecs3dCube>();
iModPart.addCollisionBoxesToList(boxes, null);
for (Vecs3dCube c : boxes) {
for (Vecs3dCube c : boxes)
{
if (c != null)
cubes.add(new Cuboid6(c.toAABB()));
}
return cubes;
}
@Override
public Iterable<IndexedCuboid6> getSubParts() {
public Iterable<IndexedCuboid6> getSubParts()
{
List<IndexedCuboid6> cubes = new ArrayList<IndexedCuboid6>();
if (iModPart.getSelectionBoxes() != null) {
if (iModPart.getSelectionBoxes() != null)
{
for (Vecs3dCube c : iModPart.getSelectionBoxes())
if (c != null)
cubes.add(new IndexedCuboid6(0, new Cuboid6(c.toAABB())));
@ -103,45 +122,52 @@ public class FMPModPart extends TMultiPart implements TSlottedPart, JNormalOcclu
@Override
@SideOnly(Side.CLIENT)
public void renderDynamic(Vector3 pos, float frame, int pass) {
public void renderDynamic(Vector3 pos, float frame, int pass)
{
iModPart.renderDynamic(new Vecs3d(pos.x, pos.y, pos.z), frame);
}
@Override
public String getType() {
public String getType()
{
return iModPart.getName();
}
@Override
public int getSlotMask() {
public int getSlotMask()
{
return 0;
}
public World getWorld() {
public World getWorld()
{
return world();
}
public int getX() {
if (iModPart.world == null || iModPart.location == null) {
public int getX()
{
if (iModPart.world == null || iModPart.location == null)
{
iModPart.setWorld(world());
iModPart.setLocation(new Location(x(), y(), z()));
}
return x();
}
public int getY() {
if (iModPart.world == null || iModPart.location == null) {
public int getY()
{
if (iModPart.world == null || iModPart.location == null)
{
iModPart.setWorld(world());
iModPart.setLocation(new Location(x(), y(), z()));
}
return y();
}
public int getZ() {
if (iModPart.world == null || iModPart.location == null) {
public int getZ()
{
if (iModPart.world == null || iModPart.location == null)
{
iModPart.setWorld(world());
iModPart.setLocation(new Location(x(), y(), z()));
}
@ -149,7 +175,8 @@ public class FMPModPart extends TMultiPart implements TSlottedPart, JNormalOcclu
}
@Override
public void onAdded() {
public void onAdded()
{
iModPart.setWorld(world());
iModPart.setLocation(new Location(x(), y(), z()));
iModPart.nearByChange();
@ -157,33 +184,36 @@ public class FMPModPart extends TMultiPart implements TSlottedPart, JNormalOcclu
}
@Override
public void update() {
if(iModPart.location != null){
public void update()
{
if (iModPart.location != null)
{
iModPart.tick();
}
}
@Override
public void onNeighborChanged() {
public void onNeighborChanged()
{
super.onNeighborChanged();
if (iModPart.world == null || iModPart.location == null) {
if (iModPart.world == null || iModPart.location == null)
{
iModPart.setWorld(world());
iModPart.setLocation(new Location(x(), y(), z()));
}
iModPart.nearByChange();
}
public void onRemoved() {
public void onRemoved()
{
iModPart.onRemoved();
super.onRemoved();
}
@Override
public boolean renderStatic(Vector3 pos, int pass) {
public boolean renderStatic(Vector3 pos, int pass)
{
boolean render = false;
RenderBlocks renderer = RenderBlocks.getInstance();
renderer.blockAccess = getWorld();
render = iModPart.renderStatic(new Vecs3d(pos.x, pos.y, pos.z), uk.co.qmunity.lib.client.render.RenderHelper.instance, pass);
RenderHelper.instance.resetRenderedSides();
RenderHelper.instance.resetTextureRotations();

View file

@ -4,28 +4,32 @@
package techreborn.partSystem.fmp;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import techreborn.partSystem.ModPart;
import codechicken.lib.vec.BlockCoord;
import codechicken.lib.vec.Vector3;
import codechicken.multipart.JItemMultiPart;
import codechicken.multipart.MultiPartRegistry;
import codechicken.multipart.TMultiPart;
import techreborn.partSystem.ModPart;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
/**
* This item is never added into the game, it is only used to add the part to the world.
* This item is never added into the game, it is only used to add the part to
* the world.
*/
public class FakeFMPPlacerItem extends JItemMultiPart {
ModPart modPart;
public FakeFMPPlacerItem(ModPart part) {
public FakeFMPPlacerItem(ModPart part)
{
modPart = part;
}
@Override
public TMultiPart newPart(ItemStack item, EntityPlayer player, World world, BlockCoord pos, int side, Vector3 vhit) {
public TMultiPart newPart(ItemStack item, EntityPlayer player, World world,
BlockCoord pos, int side, Vector3 vhit)
{
TMultiPart w = MultiPartRegistry.createPart(modPart.getName(), false);
return w;
}

View file

@ -26,7 +26,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class CablePart extends ModPart implements IEnergyConductor {
public static Vecs3dCube[] boundingBoxes = new Vecs3dCube[14];
public static float center = 0.6F;
@ -37,39 +36,55 @@ public class CablePart extends ModPart implements IEnergyConductor {
private boolean[] connections = new boolean[6];
public boolean addedToEnergyNet = false;
public static void
refreshBounding() {
public static void refreshBounding()
{
float centerFirst = center - offset;
double w = 0.2D / 2;
boundingBoxes[6] = new Vecs3dCube(centerFirst - w - 0.03, centerFirst - w - 0.08, centerFirst - w - 0.03, centerFirst + w + 0.08, centerFirst + w + 0.04, centerFirst + w + 0.08);
boundingBoxes[6] = new Vecs3dCube(centerFirst - w - 0.03, centerFirst
- w - 0.08, centerFirst - w - 0.03, centerFirst + w + 0.08,
centerFirst + w + 0.04, centerFirst + w + 0.08);
boundingBoxes[6] = new Vecs3dCube(centerFirst - w, centerFirst - w, centerFirst - w, centerFirst + w, centerFirst + w, centerFirst + w);
boundingBoxes[6] = new Vecs3dCube(centerFirst - w, centerFirst - w,
centerFirst - w, centerFirst + w, centerFirst + w, centerFirst
+ w);
int i = 0;
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
double xMin1 = (dir.offsetX < 0 ? 0.0 : (dir.offsetX == 0 ? centerFirst - w : centerFirst + w));
double xMax1 = (dir.offsetX > 0 ? 1.0 : (dir.offsetX == 0 ? centerFirst + w : centerFirst - w));
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
{
double xMin1 = (dir.offsetX < 0 ? 0.0
: (dir.offsetX == 0 ? centerFirst - w : centerFirst + w));
double xMax1 = (dir.offsetX > 0 ? 1.0
: (dir.offsetX == 0 ? centerFirst + w : centerFirst - w));
double yMin1 = (dir.offsetY < 0 ? 0.0 : (dir.offsetY == 0 ? centerFirst - w : centerFirst + w));
double yMax1 = (dir.offsetY > 0 ? 1.0 : (dir.offsetY == 0 ? centerFirst + w : centerFirst - w));
double yMin1 = (dir.offsetY < 0 ? 0.0
: (dir.offsetY == 0 ? centerFirst - w : centerFirst + w));
double yMax1 = (dir.offsetY > 0 ? 1.0
: (dir.offsetY == 0 ? centerFirst + w : centerFirst - w));
double zMin1 = (dir.offsetZ < 0 ? 0.0 : (dir.offsetZ == 0 ? centerFirst - w : centerFirst + w));
double zMax1 = (dir.offsetZ > 0 ? 1.0 : (dir.offsetZ == 0 ? centerFirst + w : centerFirst - w));
double zMin1 = (dir.offsetZ < 0 ? 0.0
: (dir.offsetZ == 0 ? centerFirst - w : centerFirst + w));
double zMax1 = (dir.offsetZ > 0 ? 1.0
: (dir.offsetZ == 0 ? centerFirst + w : centerFirst - w));
boundingBoxes[i] = new Vecs3dCube(xMin1, yMin1, zMin1, xMax1, yMax1, zMax1);
boundingBoxes[i] = new Vecs3dCube(xMin1, yMin1, zMin1, xMax1,
yMax1, zMax1);
i++;
}
}
@Override
public void addCollisionBoxesToList(List<Vecs3dCube> boxes, Entity entity) {
if (world != null || location != null) {
public void addCollisionBoxesToList(List<Vecs3dCube> boxes, Entity entity)
{
if (world != null || location != null)
{
checkConnectedSides();
} else {
} else
{
connectedSides = new HashMap<ForgeDirection, TileEntity>();
}
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
{
if (connectedSides.containsKey(dir))
boxes.add(boundingBoxes[Functions.getIntDirFromDirection(dir)]);
}
@ -77,78 +92,95 @@ public class CablePart extends ModPart implements IEnergyConductor {
}
@Override
public List<Vecs3dCube> getSelectionBoxes() {
public List<Vecs3dCube> getSelectionBoxes()
{
List<Vecs3dCube> vec3dCubeList = new ArrayList<Vecs3dCube>();
checkConnectedSides();
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
{
if (connectedSides.containsKey(dir))
vec3dCubeList.add(boundingBoxes[Functions.getIntDirFromDirection(dir)]);
vec3dCubeList.add(boundingBoxes[Functions
.getIntDirFromDirection(dir)]);
}
vec3dCubeList.add(boundingBoxes[6]);
return vec3dCubeList;
}
@Override
public List<Vecs3dCube> getOcclusionBoxes() {
public List<Vecs3dCube> getOcclusionBoxes()
{
checkConnectedSides();
List<Vecs3dCube> vecs3dCubesList = new ArrayList<Vecs3dCube>();
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
if (connectedSides.containsValue(dir))
vecs3dCubesList.add(boundingBoxes[Functions.getIntDirFromDirection(dir)]);
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
{
if (connectedSides.containsKey(dir))
vecs3dCubesList.add(boundingBoxes[Functions
.getIntDirFromDirection(dir)]);
}
return vecs3dCubesList;
}
@Override
public void renderDynamic(Vecs3d translation, double delta) {
public void renderDynamic(Vecs3d translation, double delta)
{
}
@Override
public boolean renderStatic(Vecs3d translation, RenderHelper renderer, int pass) {
renderer.setOverrideTexture(Blocks.coal_block.getIcon(0, 0));
renderer.renderBox(ModLib2QLib.convert(boundingBoxes[6]));
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
if (connectedSides.containsKey(dir))
renderer.renderBox(ModLib2QLib.convert(boundingBoxes[Functions.getIntDirFromDirection(dir)]));
if(connectedSides != null){
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
if (connectedSides.containsKey(dir))
renderer.renderBox(ModLib2QLib.convert(boundingBoxes[Functions.getIntDirFromDirection(dir)]));
}
}
return true;
}
@Override
public void writeToNBT(NBTTagCompound tag) {
public void writeToNBT(NBTTagCompound tag)
{
}
@Override
public void readFromNBT(NBTTagCompound tag) {
public void readFromNBT(NBTTagCompound tag)
{
}
@Override
public String getName() {
public String getName()
{
return "Cable";
}
@Override
public String getItemTextureName() {
public String getItemTextureName()
{
return "network:networkCable";
}
@Override
public void tick() {
if (ticks == 0) {
public void tick()
{
if (ticks == 0)
{
checkConnectedSides();
ticks += 1;
} else if (ticks == 40) {
} else if (ticks == 40)
{
ticks = 0;
} else {
} else
{
ticks += 1;
}
if(IC2.platform.isSimulating()) {
if (IC2.platform.isSimulating())
{
MinecraftForge.EVENT_BUS.post(new EnergyTileLoadEvent(this));
this.addedToEnergyNet = true;
checkConnectedSides();
@ -157,7 +189,8 @@ public class CablePart extends ModPart implements IEnergyConductor {
}
@Override
public void nearByChange() {
public void nearByChange()
{
checkConnectedSides();
}
@ -167,96 +200,123 @@ public class CablePart extends ModPart implements IEnergyConductor {
}
@Override
public void onRemoved() {
if(IC2.platform.isSimulating() && this.addedToEnergyNet) {
public void onRemoved()
{
if (IC2.platform.isSimulating() && this.addedToEnergyNet)
{
MinecraftForge.EVENT_BUS.post(new EnergyTileUnloadEvent(this));
this.addedToEnergyNet = false;
}
}
@Override
public ItemStack getItem() {
public ItemStack getItem()
{
return new ItemStack(ModPartUtils.getItemForPart(getName()));
}
public boolean shouldConnectTo(TileEntity entity, ForgeDirection dir) {
if (entity == null) {
public boolean shouldConnectTo(TileEntity entity, ForgeDirection dir)
{
if (entity == null)
{
return false;
} else if (entity instanceof IEnergyTile) {
} else if (entity instanceof IEnergyTile)
{
return true;
} else {
return ModPartUtils.hasPart(entity.getWorldObj(), entity.xCoord, entity.yCoord, entity.zCoord, this.getName());
} else
{
return ModPartUtils.hasPart(entity.getWorldObj(), entity.xCoord,
entity.yCoord, entity.zCoord, this.getName());
}
}
public void checkConnectedSides() {
public void checkConnectedSides()
{
refreshBounding();
connectedSides = new HashMap<ForgeDirection, TileEntity>();
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
{
int d = Functions.getIntDirFromDirection(dir);
if (world == null) {
if (world == null)
{
return;
}
TileEntity te = world.getTileEntity(getX() + dir.offsetX, getY() + dir.offsetY, getZ() + dir.offsetZ);
if (shouldConnectTo(te, dir)) {
//TODO if (ModPartUtils.checkOcclusion(getWorld(), getX(), getY(), getZ(), boundingBoxes[d])) {
connectedSides.put(dir, te);
// }
TileEntity te = world.getTileEntity(getX() + dir.offsetX, getY()
+ dir.offsetY, getZ() + dir.offsetZ);
if (shouldConnectTo(te, dir))
{
// TODO if (ModPartUtils.checkOcclusion(getWorld(), getX(),
// getY(), getZ(), boundingBoxes[d])) {
connectedSides.put(dir, te);
// }
}
}
checkConnections(world, getX(), getY(), getZ());
getWorld().markBlockForUpdate(getX(), getY(), getZ());
}
public void checkConnections(World world, int x, int y, int z) {
for (int i = 0; i < 6; i++) {
public void checkConnections(World world, int x, int y, int z)
{
for (int i = 0; i < 6; i++)
{
ForgeDirection dir = dirs[i];
int dx = x + dir.offsetX;
int dy = y + dir.offsetY;
int dz = z + dir.offsetZ;
connections[i] = shouldConnectTo(world.getTileEntity(dx, dy, dz), dir);
connections[i] = shouldConnectTo(world.getTileEntity(dx, dy, dz),
dir);
world.func_147479_m(dx, dy, dz);
}
world.func_147479_m(x, y, z);
}
@Override
public double getConductionLoss() {
public double getConductionLoss()
{
return 0D;
}
@Override
public double getInsulationEnergyAbsorption() {
public double getInsulationEnergyAbsorption()
{
return 256;
}
@Override
public double getInsulationBreakdownEnergy() {
public double getInsulationBreakdownEnergy()
{
return 2048;
}
@Override
public double getConductorBreakdownEnergy() {
public double getConductorBreakdownEnergy()
{
return 2048;
}
@Override
public void removeInsulation() {
public void removeInsulation()
{
}
@Override
public void removeConductor() {
public void removeConductor()
{
}
@Override
public boolean acceptsEnergyFrom(TileEntity tileEntity, ForgeDirection forgeDirection) {
public boolean acceptsEnergyFrom(TileEntity tileEntity,
ForgeDirection forgeDirection)
{
return true;
}
@Override
public boolean emitsEnergyTo(TileEntity tileEntity, ForgeDirection forgeDirection) {
public boolean emitsEnergyTo(TileEntity tileEntity,
ForgeDirection forgeDirection)
{
return true;
}
}

View file

@ -4,6 +4,10 @@
package techreborn.partSystem.parts;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.entity.Entity;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@ -12,32 +16,33 @@ import techreborn.lib.vecmath.Vecs3dCube;
import techreborn.partSystem.ModPart;
import uk.co.qmunity.lib.client.render.RenderHelper;
import java.util.ArrayList;
import java.util.List;
/**
* Created by mark on 11/12/14.
*/
public class NullPart extends ModPart {
@Override
public void addCollisionBoxesToList(List<Vecs3dCube> boxes, Entity entity) {
public void addCollisionBoxesToList(List<Vecs3dCube> boxes, Entity entity)
{
boxes.add(new Vecs3dCube(0, 0, 0, 1, 1, 1));
}
@Override
public List<Vecs3dCube> getSelectionBoxes() {
public List<Vecs3dCube> getSelectionBoxes()
{
List<Vecs3dCube> cubes = new ArrayList<Vecs3dCube>();
cubes.add(new Vecs3dCube(0, 0, 0, 1, 1, 1));
return cubes;
}
@Override
public List<Vecs3dCube> getOcclusionBoxes() {
public List<Vecs3dCube> getOcclusionBoxes()
{
return null;
}
@Override
public void renderDynamic(Vecs3d translation, double delta) {
public void renderDynamic(Vecs3d translation, double delta)
{
}
@ -47,47 +52,56 @@ public class NullPart extends ModPart {
}
@Override
public void writeToNBT(NBTTagCompound tag) {
public void writeToNBT(NBTTagCompound tag)
{
}
@Override
public void readFromNBT(NBTTagCompound tag) {
public void readFromNBT(NBTTagCompound tag)
{
}
@Override
public ItemStack getItem() {
public ItemStack getItem()
{
return null;
}
@Override
public String getName() {
public String getName()
{
return "NullPart";
}
@Override
public String getItemTextureName() {
public String getItemTextureName()
{
return "";
}
@Override
public void tick() {
public void tick()
{
}
@Override
public void nearByChange() {
public void nearByChange()
{
}
@Override
public void onAdded() {
public void onAdded()
{
}
@Override
public void onRemoved() {
public void onRemoved()
{
}
}