Jump to content

Recommended Posts

Posted

So, I created a mod that adds a few custom weapons and items, (and 1 block) by following various tutorials. The development went fairly alright, and I finally got all the stuff I wanted to work working, including the textures. However, when I recompile and reobsficate my mod, and put it into a Minecraft with forge, the textures do NOT work, though all the code and stuff related to the mechanics of the weapons do indeed work. It just seems to be the code that doesn't work.

 

My mod zip folder is like so:

tutorial

- generic

  - class files

 

mods

-pixelmod (name of my mod)

    - textures

      - blocks

      - items

 

with my block and texture items being in the blocks/items folders.

 

However, the textures just won't work. I've tried a bunch of different names for the pixelmod folder, uninstalling and reinstalling minecraft, recompiling the mod, and more. I just don't know what else to do at this point. I'm on a Mac if that helps, and using eclipse.

 

Anyone think they can help me?

Posted

First, reobf doesn't move your textures, so if you haven't you will manually need to move them into your zip. If you've done this, make sure your texture paths are "modzipfile.zip/mods/items/ItemTexture.png" yes you need to include the mods package INSIDE your zip.

If you've done all this read the console output when minecraft is launching, you may need to use multiMC or something, and it will say that it could not find the texture files and give you the path it looked in, make sure your path matches this.

Posted

Hello there, thanks for the feedback. I downloaded MultiMC, and have been looking at the console. So I did see that it is indeed failing to find the files, but where it is looking exists, as do all the files.

 

I have a folder called mods, which has a folder called generic (the folder with all the textures) as, as far as I can tell from what I've been reading, its in the correct format and folder hierarchy. This folder is of course in my zip file.

 

The errors that I'm getting in the console are as follows (general format):

2013-06-15 18:14:25 [WARNING] [Minecraft-Client] TextureManager.createTexture called for file mods/generic/textures/items/icesword.png, but that file does not exist. Ignoring.

 

but this file and the directories DO exists. I have double, triple, and quadruple checked. The case matches and everything (though case doesn't matter in the mac file system)

 

I uploaded my zip to media fire, which you can download here: http://www.mediafire.com/download/oqty1bb2lry6bke/tutorial.zip

 

I'm pretty much at a loss for what to do next, so I guess i'm pretty much stuck waiting for an answer. Thanks in advance to anyone who answers

Posted

If you're modding for 1.5.1/1.5.2, then part of your problem is that part of your code is for 1.4.7.

 

in 1.5.1 you don't need to preload textures.

 

folder structure should be

.zip/generic/(class files and client folder)

.zip/mods/generic/textures/(blocks + textures)

 

*also as a side note, organize all your information into like areas: registers with registers and whatnot.

I took over Hunting Traps Mod and work on helping the forge community as much as I can. View my work here: http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/wip-mods/1443756-1-7-2-1-6-4-1-5-2-1-4-7-hunting-traps-mod-v-0-4-0

Posted

the mods folder is in a subfolder in  the .zip, move it to the root of the zip and it should fix your problem.

 

I have the mods folder in the root. Its next to the generic folder (which hold all the classes), and I can't bring it any higher unless I bring it out of the zip. I tried bringing it out of the zip folder (which obviously didn't work) and double/triple checked the mods folder was in the root. I also downloaded the zip i uploaded and made sure this was true for it  as well.

 

If you're modding for 1.5.1/1.5.2, then part of your problem is that part of your code is for 1.4.7.

 

in 1.5.1 you don't need to preload textures.

 

folder structure should be

.zip/generic/(class files and client folder)

.zip/mods/generic/textures/(blocks + textures)

 

*also as a side note, organize all your information into like areas: registers with registers and whatnot.

 

I actually didn't start modding until after the 1.5 changes, and none of my code is for 1.4.7. I don't attempt to preload any textures in the code, and my folder structure is exactly as you (and all the other resources) say it should be in.

 

I'm not sure what you mean by organizing my information into like areas? Well i understand the concept, but not what you mean about registers with registers. Think you could explain further?

Posted
I have the mods folder in the root. Its next to the generic folder (which hold all the classes), and I can't bring it any higher unless I bring it out of the zip. I tried bringing it out of the zip folder (which obviously didn't work) and double/triple checked the mods folder was in the root. I also downloaded the zip i uploaded and made sure this was true for it  as well.

 

I downloaded the zip that you posted earlier and you have "mods" and "generic" inside a folder called "tutorial" which is at the root of the zip.  You need to move the mods folder up so that it's next to "tutorial".

 

I actually didn't start modding until after the 1.5 changes, and none of my code is for 1.4.7. I don't attempt to preload any textures in the code, and my folder structure is exactly as you (and all the other resources) say it should be in.

 

If you're not using 1.4.7 code, then what's this?

 

public class ClientProxy extends CommonProxy
{
  public void registerRenderers()
  {
    MinecraftForgeClient.preloadTexture(ITEMS_PNG);
    MinecraftForgeClient.preloadTexture(BLOCK_PNG);
  }
}

 

That's 1.4.7 code.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted

I understand now. The zip is wrong. On a mac, it doesn't show me the root folder with the tutorial folder, but shows me the root folder as the folder with both the mods and generic folder.

 

Not sure why. I opened my zip up in a PC, and saw the error. Thanks for the help guys, I should be able to fix this now. I'll report later with progress when I have some time.

Posted

I have the same problem,still unsolved. I have the mods folder at the root of the zip.The mod ID is the same as in my reference class.Everything works fine in eclipse,but it doesn't when I compile it.

Btw,I'm on a PC....

Posted

Pahimar code indeed  ;)

I'm pretty new to minecraft modding so I took some code from his packetHandler to see how to properly write one myself (will do it soon :) ) and some of his utils from the Equivalent Exchange 3 source.

Anyway,I don't know what you mean by class you're referencing your textures in. With the new 1.5 implementation of forge textures now load automatically without having to preload them...

Posted

I'm confused.I am using the getBlockTexture and getIcon functions to get the textures for my blocks and items and the registerIcons function to register them.

Is that what you mean by reference ? Registering them ?

Posted

 

That's the 1.4.7 method of textures, where all your items belong in a sprite sheet.  1.5+ uses single 16x16 icons and the texture system (vanilla code) builds a custom spritesheet.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted

 

@SideOnly(Side.CLIENT)

    private Icon top;

@SideOnly(Side.CLIENT)

    private Icon bottom;

 

      @SideOnly(Side.CLIENT)

        public Icon getIcon(int par1, int par2)

        {

            return par1 == 0 ? this.bottom: (par1 == 1 ? this.top: this.blockIcon);

        }

       

        @SideOnly(Side.CLIENT)

        public void registerIcons(IconRegister par1IconRegister)

        {

            this.blockIcon = par1IconRegister.registerIcon("[texture name]");

            this.top = par1IconRegister.registerIcon("[texture name]");

            this.bottom= par1IconRegister.registerIcon("[texture name]");

        }

 

 

that code should work for what you need.

I took over Hunting Traps Mod and work on helping the forge community as much as I can. View my work here: http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/wip-mods/1443756-1-7-2-1-6-4-1-5-2-1-4-7-hunting-traps-mod-v-0-4-0

Posted

I already know how to register an icon and how to get a block texture.It works fine in eclipse but the textures don't show up in minecraft when i compile it.

 

Then you haven't properly zipped up your mod.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted

Aaaand that's why I posted my mod zip.I think it is correctly packaged.Could you please take a look at it and tell me what I did wrong,because it is probably something stupid that I'm just not able to spot...

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Version 1.19 - Forge 41.0.63 I want to create a wolf entity that I can ride, so far it seems to be working, but the problem is that when I get on the wolf, I can’t control it. I then discovered that the issue is that the server doesn’t detect that I’m riding the wolf, so I’m struggling with synchronization. However, it seems to not be working properly. As I understand it, the server receives the packet but doesn’t register it correctly. I’m a bit new to Java, and I’ll try to provide all the relevant code and prints *The comments and prints are translated by chatgpt since they were originally in Spanish* Thank you very much in advance No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. MountableWolfEntity package com.vals.valscraft.entity; import com.vals.valscraft.network.MountSyncPacket; import com.vals.valscraft.network.NetworkHandler; import net.minecraft.client.Minecraft; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.animal.Wolf; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.Entity; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import net.minecraftforge.event.TickEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.network.PacketDistributor; public class MountableWolfEntity extends Wolf { private boolean hasSaddle; private static final EntityDataAccessor<Byte> DATA_ID_FLAGS = SynchedEntityData.defineId(MountableWolfEntity.class, EntityDataSerializers.BYTE); public MountableWolfEntity(EntityType<? extends Wolf> type, Level level) { super(type, level); this.hasSaddle = false; } @Override protected void defineSynchedData() { super.defineSynchedData(); this.entityData.define(DATA_ID_FLAGS, (byte)0); } public static AttributeSupplier.Builder createAttributes() { return Wolf.createAttributes() .add(Attributes.MAX_HEALTH, 20.0) .add(Attributes.MOVEMENT_SPEED, 0.3); } @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { ItemStack itemstack = player.getItemInHand(hand); if (itemstack.getItem() == Items.SADDLE && !this.hasSaddle()) { if (!player.isCreative()) { itemstack.shrink(1); } this.setSaddle(true); return InteractionResult.SUCCESS; } else if (!level.isClientSide && this.hasSaddle()) { player.startRiding(this); MountSyncPacket packet = new MountSyncPacket(true); // 'true' means the player is mounted NetworkHandler.CHANNEL.sendToServer(packet); // Ensure the server handles the packet return InteractionResult.SUCCESS; } return InteractionResult.PASS; } @Override public void travel(Vec3 travelVector) { if (this.isVehicle() && this.getControllingPassenger() instanceof Player) { System.out.println("The wolf has a passenger."); System.out.println("The passenger is a player."); Player player = (Player) this.getControllingPassenger(); // Ensure the player is the controller this.setYRot(player.getYRot()); this.yRotO = this.getYRot(); this.setXRot(player.getXRot() * 0.5F); this.setRot(this.getYRot(), this.getXRot()); this.yBodyRot = this.getYRot(); this.yHeadRot = this.yBodyRot; float forward = player.zza; float strafe = player.xxa; if (forward <= 0.0F) { forward *= 0.25F; } this.flyingSpeed = this.getSpeed() * 0.1F; this.setSpeed((float) this.getAttributeValue(Attributes.MOVEMENT_SPEED) * 1.5F); this.setDeltaMovement(new Vec3(strafe, travelVector.y, forward).scale(this.getSpeed())); this.calculateEntityAnimation(this, false); } else { // The wolf does not have a passenger or the passenger is not a player System.out.println("No player is mounted, or the passenger is not a player."); super.travel(travelVector); } } public boolean hasSaddle() { return this.hasSaddle; } public void setSaddle(boolean hasSaddle) { this.hasSaddle = hasSaddle; } @Override protected void dropEquipment() { super.dropEquipment(); if (this.hasSaddle()) { this.spawnAtLocation(Items.SADDLE); this.setSaddle(false); } } @SubscribeEvent public static void onServerTick(TickEvent.ServerTickEvent event) { if (event.phase == TickEvent.Phase.START) { MinecraftServer server = net.minecraftforge.server.ServerLifecycleHooks.getCurrentServer(); if (server != null) { for (ServerPlayer player : server.getPlayerList().getPlayers()) { if (player.isPassenger() && player.getVehicle() instanceof MountableWolfEntity) { MountableWolfEntity wolf = (MountableWolfEntity) player.getVehicle(); System.out.println("Tick: " + player.getName().getString() + " is correctly mounted on " + wolf); } } } } } private boolean lastMountedState = false; @Override public void tick() { super.tick(); if (!this.level.isClientSide) { // Only on the server boolean isMounted = this.isVehicle() && this.getControllingPassenger() instanceof Player; // Only print if the state changed if (isMounted != lastMountedState) { if (isMounted) { Player player = (Player) this.getControllingPassenger(); // Verify the passenger is a player System.out.println("Server: Player " + player.getName().getString() + " is now mounted."); } else { System.out.println("Server: The wolf no longer has a passenger."); } lastMountedState = isMounted; } } } @Override public void addPassenger(Entity passenger) { super.addPassenger(passenger); if (passenger instanceof Player) { Player player = (Player) passenger; if (!this.level.isClientSide && player instanceof ServerPlayer) { // Send the packet to the server to indicate the player is mounted NetworkHandler.CHANNEL.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new MountSyncPacket(true)); } } } @Override public void removePassenger(Entity passenger) { super.removePassenger(passenger); if (passenger instanceof Player) { Player player = (Player) passenger; if (!this.level.isClientSide && player instanceof ServerPlayer) { // Send the packet to the server to indicate the player is no longer mounted NetworkHandler.CHANNEL.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new MountSyncPacket(false)); } } } @Override public boolean isControlledByLocalInstance() { Entity entity = this.getControllingPassenger(); return entity instanceof Player; } @Override public void positionRider(Entity passenger) { if (this.hasPassenger(passenger)) { double xOffset = Math.cos(Math.toRadians(this.getYRot() + 90)) * 0.4; double zOffset = Math.sin(Math.toRadians(this.getYRot() + 90)) * 0.4; passenger.setPos(this.getX() + xOffset, this.getY() + this.getPassengersRidingOffset() + passenger.getMyRidingOffset(), this.getZ() + zOffset); } } } MountSyncPacket package com.vals.valscraft.network; import com.vals.valscraft.entity.MountableWolfEntity; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraftforge.network.NetworkEvent; import java.util.function.Supplier; public class MountSyncPacket { private final boolean isMounted; public MountSyncPacket(boolean isMounted) { this.isMounted = isMounted; } public void encode(FriendlyByteBuf buffer) { buffer.writeBoolean(isMounted); } public static MountSyncPacket decode(FriendlyByteBuf buffer) { return new MountSyncPacket(buffer.readBoolean()); } public void handle(NetworkEvent.Context context) { context.enqueueWork(() -> { ServerPlayer player = context.getSender(); // Get the player from the context if (player != null) { // Verifies if the player has dismounted if (!isMounted) { Entity vehicle = player.getVehicle(); if (vehicle instanceof MountableWolfEntity wolf) { // Logic to remove the player as a passenger wolf.removePassenger(player); System.out.println("Server: Player " + player.getName().getString() + " is no longer mounted."); } } } }); context.setPacketHandled(true); // Marks the packet as handled } } networkHandler package com.vals.valscraft.network; import com.vals.valscraft.valscraft; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.network.NetworkRegistry; import net.minecraftforge.network.simple.SimpleChannel; import net.minecraftforge.network.NetworkEvent; import java.util.function.Supplier; public class NetworkHandler { private static final String PROTOCOL_VERSION = "1"; public static final SimpleChannel CHANNEL = NetworkRegistry.newSimpleChannel( new ResourceLocation(valscraft.MODID, "main"), () -> PROTOCOL_VERSION, PROTOCOL_VERSION::equals, PROTOCOL_VERSION::equals ); public static void init() { int packetId = 0; // Register the mount synchronization packet CHANNEL.registerMessage( packetId++, MountSyncPacket.class, MountSyncPacket::encode, MountSyncPacket::decode, (msg, context) -> msg.handle(context.get()) // Get the context with context.get() ); } }  
    • Do you use features of inventory profiles next (ipnext) or is there a change without it?
    • Remove rubidium - you are already using embeddium, which is a fork of rubidium
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.