generated from tilera/1710mod
123 lines
4.9 KiB
Java
123 lines
4.9 KiB
Java
package mods.immibis.tinycarts;
|
|
|
|
import java.lang.ref.WeakReference;
|
|
|
|
import mods.immibis.cobaltite.AssignedBlock;
|
|
import mods.immibis.cobaltite.AssignedItem;
|
|
import mods.immibis.cobaltite.CobaltiteMod;
|
|
import mods.immibis.cobaltite.ModBase;
|
|
import mods.immibis.core.api.APILocator;
|
|
import mods.immibis.core.api.FMLModInfo;
|
|
import mods.immibis.subworlds.ExitTeleporter;
|
|
import mods.immibis.subworlds.dw.DWWorldProvider;
|
|
import net.minecraft.entity.Entity;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.entity.player.EntityPlayerMP;
|
|
import net.minecraft.init.Items;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.server.MinecraftServer;
|
|
import net.minecraft.server.management.ServerConfigurationManager;
|
|
import net.minecraft.util.ChatComponentText;
|
|
import net.minecraft.world.WorldServer;
|
|
import cpw.mods.fml.client.registry.RenderingRegistry;
|
|
import cpw.mods.fml.common.Mod;
|
|
import cpw.mods.fml.common.Mod.EventHandler;
|
|
import cpw.mods.fml.common.event.FMLInitializationEvent;
|
|
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
|
import cpw.mods.fml.common.event.FMLServerStartingEvent;
|
|
import cpw.mods.fml.common.registry.EntityRegistry;
|
|
import cpw.mods.fml.common.registry.GameRegistry;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
|
|
/**
|
|
* IMPORTANT SMALL DETAIL: -X EITHER FORWARD OR BACKWARD, -Z IS SIDEWAYS.
|
|
*/
|
|
@Mod(modid="TinyCarts", name="TinyCarts", version="0.2", dependencies="required-after:SubWorlds")
|
|
@CobaltiteMod()
|
|
@FMLModInfo(authors="immibis", description="", url="")
|
|
public class TinyCartsMod extends ModBase {
|
|
@AssignedItem(id="awesomecart")
|
|
public static ItemMinecartAwesome itemCart;
|
|
|
|
@AssignedBlock(id="transparentbedrock")
|
|
public static BlockTransparentBedrock transparentBedrock;
|
|
|
|
@EventHandler
|
|
public void init(FMLInitializationEvent evt) {
|
|
EntityRegistry.registerModEntity(EntityMinecartAwesome.class, "tinycarts.cart", 0, this, 50, 1, true);
|
|
EntityRegistry.registerModEntity(EntityMinecartAwesome.DWSubEntity.class, "tinycarts.cart.dwsub", 1, this, 50, 1, true);
|
|
|
|
APILocator.getNetManager().listen(new NetworkHandler());
|
|
}
|
|
|
|
@Override
|
|
protected void addRecipes() throws Exception {
|
|
GameRegistry.addRecipe(new ItemStack(itemCart), "D D", "DDD", 'D', Items.diamond);
|
|
}
|
|
|
|
@EventHandler
|
|
public void onServerStart(FMLServerStartingEvent evt) {
|
|
evt.registerServerCommand(new CommandExitCart());
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
protected void clientInit() throws Exception {
|
|
RenderingRegistry.registerEntityRenderingHandler(EntityMinecartAwesome.class, new RenderMinecartAwesome());
|
|
}
|
|
|
|
@EventHandler
|
|
public void __init(FMLInitializationEvent evt) {super._init(evt);}
|
|
@EventHandler
|
|
public void __preinit(FMLPreInitializationEvent evt) {super._preinit(evt);}
|
|
|
|
private static long lastRFCWarnTime = 0;
|
|
public static void removeFromCart(Entity ent, boolean ignoreIfNotInCart) {
|
|
if(ent.worldObj.isRemote) {
|
|
assert false : "removeFromCart - on client world!";
|
|
return;
|
|
}
|
|
|
|
if(!(ent.worldObj.provider instanceof DWWorldProvider)) {
|
|
assert ignoreIfNotInCart : "removeFromCart - not in DW world!";
|
|
return;
|
|
}
|
|
|
|
DWWorldProvider wp = (DWWorldProvider)ent.worldObj.provider;
|
|
if(wp.props.generatorClass != InteriorChunkGen.class) {
|
|
assert ignoreIfNotInCart : "removeFromCart - not in TinyCart world!";
|
|
return;
|
|
}
|
|
|
|
// XXX this way of getting the entity is hacky
|
|
WeakReference<EntityMinecartAwesome.DWSubEntity> dwsub_ref = EntityMinecartAwesome.entitiesByInternalID.get(wp.dimensionId);
|
|
|
|
EntityMinecartAwesome.DWSubEntity dwsub = dwsub_ref == null ? null : dwsub_ref.get();
|
|
if(dwsub == null) {
|
|
if(lastRFCWarnTime - System.nanoTime() > 5000) {
|
|
System.out.println("[TinyCarts] Potential problem - entity is leaving a cart, but we can't find the outside of the cart! Entity is "+ent+", internal world ID is "+ent.worldObj.provider.dimensionId+". This message will only be printed once every 5 seconds, maximum.");
|
|
lastRFCWarnTime = System.nanoTime();
|
|
}
|
|
if(ent instanceof EntityPlayer)
|
|
((EntityPlayer)ent).addChatMessage(new ChatComponentText("Uh oh! Outside of the cart could not be found! Cannot teleport you, sorry."));
|
|
return;
|
|
}
|
|
|
|
WorldServer outsideWorld = (WorldServer)dwsub.worldObj;
|
|
double x = dwsub.posX;
|
|
double y = dwsub.posY;
|
|
double z = dwsub.posZ;
|
|
|
|
x += (outsideWorld.rand.nextDouble() + 1) * (outsideWorld.rand.nextBoolean() ? -1 : 1);
|
|
z += (outsideWorld.rand.nextDouble() + 1) * (outsideWorld.rand.nextBoolean() ? -1 : 1);
|
|
|
|
ServerConfigurationManager scm = MinecraftServer.getServer().getConfigurationManager();
|
|
if(ent instanceof EntityPlayerMP)
|
|
scm.transferPlayerToDimension((EntityPlayerMP)ent, outsideWorld.provider.dimensionId, new ExitTeleporter(outsideWorld, x, y, z));
|
|
//else
|
|
// scm.transferEntityToWorld(ent, par2, par3WorldServer, par4WorldServer)
|
|
|
|
}
|
|
}
|