Jump to content

Recommended Posts

Guest Abrynos
Posted

I know this one! It's good. But if you don't want a written one you can also go on Youtube and search for Neale Gaming

Posted

Please don't follow Neale Gaming's tutorials.

 

Their quality is sub-par, the content is often erroneous, and the code doesn't follow well-established conventions.

 

Furthermore, the speaker's explanation of how things work are often misunderstood.

  • Like 1
Posted

I don't get it with text its hard and video is same.... can anyone get me all clear without boring advenced, i wanna just for begginers plant on farmland and when its growed you can destroy and pickup please can anyone tell me clear.

Posted

Why not look at the vanilla crop code and go from there? If you have problems with that come back with a specific question.

How to look at vanilla crop code can you tell me?

Posted

I don't get it with text its hard and video is same.... can anyone get me all clear without boring advenced, i wanna just for begginers plant on farmland and when its growed you can destroy and pickup please can anyone tell me clear.

 

My tutorial isn't advanced.  And you have to do all the steps in my tutorial, you cant really simplify further. Lastly text tutorials are good because they have code examples.  Anyway to make a crop you need a seed item and a plant block.

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Posted

I don't get it with text its hard and video is same.... can anyone get me all clear without boring advenced, i wanna just for begginers plant on farmland and when its growed you can destroy and pickup please can anyone tell me clear.

 

My tutorial isn't advanced.  And you have to do all the steps in my tutorial, you cant really simplify further. Lastly text tutorials are good because they have code examples.  Anyway to make a crop you need a seed item and a plant block.

I got no texture when i plant please help but i write right like this

 

 

iIcon[0] = parIIconRegister.registerIcon("itemsplusmod:cucumber_stage_0");

iIcon[1] = parIIconRegister.registerIcon("itemsplusmod:cucumber_stage_0");

iIcon[2] = parIIconRegister.registerIcon("itemsplusmod:cucumber_stage_1");

iIcon[3] = parIIconRegister.registerIcon("itemsplusmod:cucumber_stage_1");

iIcon[4] = parIIconRegister.registerIcon("itemsplusmod:cucumber_stage_2");

iIcon[5] = parIIconRegister.registerIcon("itemsplusmod:cucumber_stage_2");

iIcon[6] = parIIconRegister.registerIcon("itemsplusmod:cucumber_stage_3");

iIcon[7] = parIIconRegister.registerIcon("itemsplusmod:cucumber_stage_3");

 

Posted

Okay, let's have a look, then!

 

 

  • You need to
    @Override

    the

    getIcon

    method in your

    BlockCucumber

    class.
     
     
    Furthermore, there are several issues with your code:
     

    • Remove the following for-now unused imports from
      itemsplusmod

      class:

    import net.minecraft.block.material.Material;
    import net.minecraft.init.Blocks;
    import net.minecraft.item.ItemSeedFood;
    import net.minecraft.item.ItemSeeds;
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;


    •  
    • The convention is to name classes using TitleCase. Rename your main mod class.
    • Your modid should be all lowercase
    • Your packages should be all lowercase (specifically, com.itemsplusmod.Proxy, com.itemsplusmod.Plants and com.itemsplusmod.Items)
    • You should add at least a
      preInit

      method, annotate it

      @EventHandler

      , and assign your static fields there.


       

       

      When you have performed all of these changes, here are some suggestions I recommend you to follow:

       

       

      • Fix your indentiation: Correctness and consistency of indentation is important for reading your code correctly
      • Keep MODID, NAME and VERSION as static final fields of your main mod class
      • Reference your MODID when working with assets such as textures
      • When posting code as gists, use syntax highlighting by selecting your language of choice (Java in this case) from the dropdown menu

Posted

Okay, let's have a look, then!

 

 

  • You need to
    @Override

    the

    getIcon

    method in your

    BlockCucumber

    class.
     
     
    Furthermore, there are several issues with your code:
     

    • Remove the following for-now unused imports from
      itemsplusmod

      class:

import net.minecraft.block.material.Material;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemSeedFood;
import net.minecraft.item.ItemSeeds;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;


  •  
  • The convention is to name classes using TitleCase. Rename your main mod class.
  • Your modid should be all lowercase
  • Your packages should be all lowercase (specifically, com.itemsplusmod.Proxy, com.itemsplusmod.Plants and com.itemsplusmod.Items)
  • You should add at least a
    preInit

    method, annotate it

    @EventHandler

    , and assign your static fields there.


     

     

    When you have performed all of these changes, here are some suggestions I recommend you to follow:

     

     

    • Fix your indentiation: Correctness and consistency of indentation is important for reading your code correctly
    • Keep MODID, NAME and VERSION as static final fields of your main mod class
    • Reference your MODID when working with assets such as textures
    • When posting code as gists, use syntax highlighting by selecting your language of choice (Java in this case) from the dropdown menu

 

I did all that and crop textures are not working.

Posted

 

// seems that crops like to have 8 growth icon, but okay the repeat actual texture if you want
WTF dude. Learn some java, then you don't have to do shit like this.

 

Diesieben07, actually that comment is mine (from my tutorial).  It isn't a comment related to Java, I'm just saying you don't have to create animation textures for all 8 stages.  Basically it is to save effort on the artwork of the textures.  For example I found that having 4 textures still give fine effect of growth (i.e. you put bonemeal on and it grows).

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Posted

How to i make preInit for block i maked all like this :

 

CucumberBlock :

https://gist.github.com/Propucani2/58a26a6d29240dba856b

 

MainClass :

https://gist.github.com/Propucani2/2defe1c12791dfa8cbd6

 

ItemSeedFood :

https://gist.github.com/Propucani2/66764469a499ddc7f117

 

ItemBlockCrop :

https://gist.github.com/Propucani2/7bc30e0e95b698ae582e

 

CucumberItem :

https://gist.github.com/Propucani2/ae8fa3d30dff9535e1a7

 

Please help i not have texture.

 

 

 

 

Posted

Im begginer in java i dont know all, soo can you tell me how to i make in preInit phase.

 

It is okay to be a beginner in Java, but you're too much a beginner to try modding.  The difficulty with modding is that you're trying to modify someone else's code (Minecraft and Forge) and so you have to know Java quite well to do anything significant.

 

If you don't know how to even initialize instances, how to use the static denotation, how constructors work, and so on, you simply don't know enough Java to even get started.

 

Even people like me, who is more intermediate in Java, can still get stuck very often because modding is also about figuring out the code that already exists.  If I wrote the whole code myself, then I probably wouldn't have trouble, but you have to figure out all the weird ways that Minecraft and Forge work.  Things like the lifestyle events (like "preInit" that diesieben07 is talking about), or the sided proxy system, or the way blocks are tiled without being individually instances, or the way metadata works, and so on aren't related to learning Java but are about learning how Minecraft and Forge works. if I'm trying to figure out how to make a "key up" event I had to spend a couple days reviewing the code, trying different things, asking questions and then eventually giving up because even the experts said that the solution required modification to the Forge code source.

 

So we're not trying to be mean when we tell you you need to learn more before modding, just practical. 

 

To learn Java, I recommend actually reading a real book (not online) because most people that try online programming only pay attention to the topics they think are important but a book will ensure you cover all the topics.  There are so many details in a programming language including differences from other programming languages you may know (like in Java it is a mistake to use == to compare Strings, or in Java enum can't be used as a array, or in Java a multi-dimensional array can be jagged, or that object parameters passed to a method access the actual object instead of a copy, and so on).

 

The really big programming books like Java For Dummies are a little scary because they are so big.  I recommend Java in Easy Steps because it is a slim little book but covers all the basic topics in a easy to read manner.

 

If you do want to continue with modding, I suggest you stick with the following things that don't require much programming skill:

  - making new recipes (that use vanilla items)

  - making very simple extensions of vanilla items (e.g. make a custom entity that extends a vanilla one and only change a couple simple things like the health, sounds and texture).

 

A crop isn't quite simple because it has interaction between a custom item (the seed) and custom block (the plant) which can be harvested for a custom item (the fruit).

 

Note you can also have a lot of fun modifying Minecraft without doing any programming.  My kids spend a lot of time making texture packs and skins that radically change the look of Minecraft.  You can also use command blocks to create some really interesting things including minigames.

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Posted

I will read Programiranje Java (in me country is called like that).

So i will ask you for help if i need when i read.

 

I'll still try to help you in the PM messages since you've been trying to follow my tutorial.  I've already sent you the first replies there.  I just wanted to set your expectations that you need to get strong in Java to continue further.

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

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

    • It is 1.12.2 - I have no idea if there is a 1.12 pack
    • Okay, but does the modpack works with 1.12 or just with 1.12.2, because I need the Forge client specifically for Minecraft 1.12, not 1.12.2
    • 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?
  • Topics

×
×
  • Create New...

Important Information

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