Jump to content

[1.18]How to add PlayerData


ocome

Recommended Posts

6 hours ago, ocome said:

By the way, if this is a java thing, I hope you don't mind, but why do I get a static context error with getManaData

the method is static, so you don't need a instance of the class to call this method

6 hours ago, ocome said:
ManaData statsa1s = MyCapabilityImplementation.getManaData();

this is completely wrong, call Player#getCapability to get your Capability inside of a LazyOptional then call LazyOptional#orElseThrow to get the Capability Interface and to throw a Exception if the Capability is not present,
then you can get the data from your Capability Interface

1 hour ago, ocome said:
final MyCapabilityProviderEntity provider = new MyCapabilityProviderEntity();

you didn't do what i told you to do, you should create a constructor with the Player and store it in your MyCapabilityImplementation

1 hour ago, ocome said:
new MyCapabilityImplementation().tick(eventObject);

what on earth is that?

Link to comment
Share on other sites

17 hours ago, Luis_ST said:

this is completely wrong, call Player#getCapability to get your Capability inside of a LazyOptional then call LazyOptional#orElseThrow to get the Capability Interface and to throw a Exception if the Capability is not present,
then you can get the data from your Capability Interface

        LazyOptional<MyCapabilityInterface> stats1 = minecraft.player.getCapability(MyCapability.INSTANCE);
        MyCapabilityInterface myCapabilityInterface=stats1.orElseThrow(IllegalStateException::new);
        ManaData manaData= myCapabilityInterface.getManaData();
        int level =manaData.getManaLevel();

implemented. No errors are seen.

 

17 hours ago, Luis_ST said:

you didn't do what i told you to do, you should create a constructor with the Player and store it in your MyCapabilityImplementation

        public MyCapabilityProviderEntity(Player eventObject) {
           new MyCapabilityImplementation(eventObject) ;
        }

 

    public void  onAttachingCapabilitiesEntity(final AttachCapabilitiesEvent<Entity> event) {
        boolean iof =  event.getObject()  instanceof Player;
        if (iof ==true) {
            Player eventObject = (Player) event.getObject();
            final MyCapabilityProviderEntity provider = new MyCapabilityProviderEntity(eventObject);
            event.addCapability(MyCapabilityProviderEntity.IDENTIFIER, provider);
       }
    }

MyCapabilityImplementation


public  class MyCapabilityImplementation implements MyCapabilityInterface {
    protected   ManaData manaData = new ManaData();
    private static final String NBT_KEY_DAMAGE_DEALT = "damageDealt";
    public Player player ;
    public Level level;
    private String Value = "";
    public Minecraft minecraft;

    public MyCapabilityImplementation() {
    }

    public MyCapabilityImplementation(Player object) {
        player=object;
    }
    @Override
    public ManaData getManaData() {
        return this.manaData;
    }

Is this what it means to create in the player?
Honestly, I'm not sure I'm getting it right due to the way the meaning is conveyed and my lack of knowledge

 

Link to comment
Share on other sites

4 hours ago, ocome said:

implemented. No errors are seen.

correct, you can short up the code a bit but this is optional 

4 hours ago, ocome said:

Is this what it means to create in the player?

yeah

4 hours ago, ocome said:

Honestly, I'm not sure I'm getting it right due to the way the meaning is conveyed and my lack of knowledge

that's basic java, to create a Constructor with a parameter and then to store the Object in Field 

Link to comment
Share on other sites

13 hours ago, Luis_ST said:

that's basic java, to create a Constructor with a parameter

MyCapabilityAttacher

            Player eventObject = (Player) event.getObject();
            final MyCapabilityProviderEntity provider = new MyCapabilityProviderEntity(eventObject);
            event.addCapability(MyCapabilityProviderEntity.IDENTIFIER, provider);
        public MyCapabilityProviderEntity(Player eventObject) {
            new MyCapabilityImplementation(eventObject);
        }
13 hours ago, Luis_ST said:

and then to store the Object in Field 

MyCapabilityImplementation

public  class MyCapabilityImplementation implements MyCapabilityInterface {
    protected   ManaData manaData = new ManaData();
    private static final String NBT_KEY_DAMAGE_DEALT = "damageDealt";
    public Player player ;
    public Level level;
    private String Value = "";

    public MyCapabilityImplementation(Player eventObject) {
        player=eventObject;
    }

Is this correct?

I tried to make it as described, but it may not have come across correctly.

Edited by ocome
Link to comment
Share on other sites

1 hour ago, Luis_ST said:

you could make the fields final and initialize the level field in the constructor,
does it work?

public  class MyCapabilityImplementation implements MyCapabilityInterface {
    protected   ManaData manaData = new ManaData();
    private static final String NBT_KEY_DAMAGE_DEALT = "damageDealt";
    public final Player player ;
    public final Level level ;
    private  String Value = "";

    public MyCapabilityImplementation(Player eventObject) {
        player=eventObject;
        level = eventObject.getLevel();
    }

    public MyCapabilityImplementation() {
        player = null;
        level = null;
    }

It works and no special errors occur anymore

I added it to the previous section thinking it should be executed at Player runtime, but it was only executed at the start.

Edited by ocome
Link to comment
Share on other sites

On 2/4/2022 at 11:40 PM, Luis_ST said:

hen subscribe to TickEvent.Player and check if it's on server,
then get your Capability and call tick there

Note: TickEvents are fired twice you need to check the phase of the Event

    @SubscribeEvent
    public void onPlayerPreTick(final AttachCapabilitiesEvent<Entity> event){
        Player player =Minecraft.getInstance().player;
        boolean playercheck = MinecraftForge.EVENT_BUS.post(new TickEvent.PlayerTickEvent(TickEvent.Phase.START, player));
        if(playercheck ==true)
        {
            Minecraft minecraft = Minecraft.getInstance();
            LazyOptional<MyCapabilityInterface> stats1 = minecraft.player.getCapability(MyCapability.INSTANCE);
            MyCapabilityInterface myCapabilityInterface = stats1.orElseThrow(IllegalStateException::new);
            myCapabilityInterface.tick();
        }
    }

Is this wrong?
player is being called, but all return false

Link to comment
Share on other sites

9 minutes ago, ocome said:
MinecraftForge.EVENT_BUS.post(new TickEvent.PlayerTickEvent(TickEvent.Phase.START, player));

why on earth are you doing this?

 

10 minutes ago, ocome said:
Minecraft minecraft = Minecraft.getInstance();

thus is client side only, what do you want to call each tick

Link to comment
Share on other sites

19 minutes ago, Luis_ST said:

why on earth are you doing this?

I thought if I used this it would return true for Player.END

 

22 minutes ago, Luis_ST said:

thus is client side only, what do you want to call each tick

Okay, I'll think about it some more.

Link to comment
Share on other sites

1 hour ago, ocome said:

I thought if I used this it would return true for Player.END

no you create a new TickEvent inside the TickEvent, you basically need to check if the Phase which is given by the Event equals Phase.START or Phase.END

1 hour ago, ocome said:

Okay, I'll think about it some more.

please answer my question

Edited by Luis_ST
Link to comment
Share on other sites

5 minutes ago, ocome said:

I thought I needed to call capability

yeah but use the Player from the Event

1 hour ago, ocome said:
public void onPlayerPreTick(final AttachCapabilitiesEvent<Entity> event)

you need to use there TickEvent.Player and not AttachCapabilitiesEvent

2 hours ago, ocome said:
myCapabilityInterface.tick();

what does this method do?

Link to comment
Share on other sites

24 minutes ago, Luis_ST said:

yeah but use the Player from the Event

My idea is to get the vanilla player, call Capability when the vanilla START is obtained, and then call tick from Interface.... 

However, from your answer, it seems that it is not. 
It's hard to .... I want to understand :(

 

21 minutes ago, Luis_ST said:

you need to use there TickEvent.Player and not AttachCapabilitiesEvent

I did not know what parameters were available.
I'm sure there is a way to find out from somewhere, but do you know of one?

 

21 minutes ago, Luis_ST said:

what does this method do?

implementation

public void tick() {
        if (!this.level.isClientSide) {
            this.manaData.tick(player);
        }
}

 

    net.minecraftforge.event.ForgeEventFactory.onPlayerPreTick(player);

need equivalent of this code?

 

Manadata

    public void tick(Player p_38711_) {
        Difficulty difficulty = p_38711_.level.getDifficulty();
        this.lastManaLevel = this.manaLevel;
        if (this.exhaustionLevel > 4.0F) {
            this.exhaustionLevel -= 4.0F;
            if (this.saturationLevel > 0.0F) {
                this.saturationLevel = Math.max(this.saturationLevel - 1.0F, 0.0F);
            } else if (difficulty != Difficulty.PEACEFUL) {
                this.manaLevel = Math.max(this.manaLevel - 1, 0);
            }
        }

        boolean flag = p_38711_.level.getGameRules().getBoolean(GameRules.RULE_NATURAL_REGENERATION);
        if (flag && this.saturationLevel > 0.0F && p_38711_.isHurt() && this.manaLevel >= 20) {
            ++this.tickTimer;
            if (this.tickTimer >= 10) {
                float f = Math.min(this.saturationLevel, 6.0F);
                p_38711_.heal(f / 6.0F);
                this.addExhaustion(f);
                this.tickTimer = 0;
            }
        } else if (flag && this.manaLevel >= 18 && p_38711_.isHurt()) {
            ++this.tickTimer;
            if (this.tickTimer >= 80) {
                p_38711_.heal(1.0F);
                this.addExhaustion(6.0F);
                this.tickTimer = 0;
            }
        } else if (this.manaLevel <= 0) {
            ++this.tickTimer;
            if (this.tickTimer >= 80) {
                if (p_38711_.getHealth() > 10.0F || difficulty == Difficulty.HARD || p_38711_.getHealth() > 1.0F && difficulty == Difficulty.NORMAL) {
                    p_38711_.hurt(DamageSource.STARVE, 1.0F);
                }

                this.tickTimer = 0;
            }
        } else {
            this.tickTimer = 0;
        }

    }

 

Link to comment
Share on other sites

20 hours ago, Luis_ST said:

no just create a Event handler, similar to the AttachCapabilitiesEvent but with TickEvent.Player

    @SubscribeEvent
    public void onPlayerPreTick(final TickEvent.PlayerTickEvent  event){
        Player player = event.player;
      boolean iof = player  instanceof Player;
        if (iof ==true) {
            LazyOptional<MyCapabilityInterface> stats1 = player.getCapability(MyCapability.INSTANCE);
            try {
                MyCapabilityInterface myCapabilityInterface = stats1.orElseThrow(IllegalStateException::new);
                myCapabilityInterface.tick(event.player);
            } catch (IllegalStateException e) {
                return;
            }
        }
    }

Basically, it's working!

Edited by ocome
Link to comment
Share on other sites

OK!!! I've created a system for regeneration mana  it's working!(not perfect, but I think it's adjustable.)
I was able to do this while thinking about it, and I think I have gained some abilities that I can use in other ways.
Thank you very much for answering my questions so many times over a very long period of time! :D

Link to comment
Share on other sites

7 hours ago, diesieben07 said:

What error?

---- Minecraft Crash Report ----
// There are four lights!

Time: 2022/02/09 1:28
Description: Ticking player

java.lang.IllegalStateException: null
	at net.minecraftforge.common.util.LazyOptional.orElseThrow(LazyOptional.java:295) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2376%2382!/:?] {re:classloading}
	at com.playerelementtutorial.playerelementtutorialmod.MyCapabilityAttacher.onPlayerPreTick(MyCapabilityAttacher.java:72) ~[%2381!/:?] {re:classloading}
	at net.minecraftforge.eventbus.ASMEventHandler_1_MyCapabilityAttacher_onPlayerPreTick_PlayerTickEvent.invoke(.dynamic) ~[?:?] {}
	at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:85) ~[eventbus-5.0.7.jar%239!/:?] {}
	at net.minecraftforge.eventbus.EventBus.post(EventBus.java:302) ~[eventbus-5.0.7.jar%239!/:?] {}
	at net.minecraftforge.eventbus.EventBus.post(EventBus.java:283) ~[eventbus-5.0.7.jar%239!/:?] {}
	at net.minecraftforge.event.ForgeEventFactory.onPlayerPostTick(ForgeEventFactory.java:856) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2376%2382!/:?] {re:classloading}
	at net.minecraft.world.entity.player.Player.tick(Player.java:278) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2377!/:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.server.level.ServerPlayer.doTick(ServerPlayer.java:439) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2377!/:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.server.network.ServerGamePacketListenerImpl.tick(ServerGamePacketListenerImpl.java:206) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2377!/:?] {re:classloading}
	at net.minecraft.network.Connection.tick(Connection.java:233) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2377!/:?] {re:classloading}
	at net.minecraft.server.network.ServerConnectionListener.tick(ServerConnectionListener.java:142) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2377!/:?] {re:classloading}
	at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:882) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2377!/:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:808) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2377!/:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.client.server.IntegratedServer.tickServer(IntegratedServer.java:86) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2377!/:?] {re:classloading,pl:runtimedistcleaner:A}
	at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:668) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2377!/:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:258) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2377!/:?] {re:classloading,pl:accesstransformer:B}
	at java.lang.Thread.run(Thread.java:833) [?:?] {}


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Thread: Server thread
Stacktrace:
	at net.minecraftforge.common.util.LazyOptional.orElseThrow(LazyOptional.java:295) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2376%2382!/:?] {re:classloading}
	at com.playerelementtutorial.playerelementtutorialmod.MyCapabilityAttacher.onPlayerPreTick(MyCapabilityAttacher.java:72) ~[%2381!/:?] {re:classloading}
	at net.minecraftforge.eventbus.ASMEventHandler_1_MyCapabilityAttacher_onPlayerPreTick_PlayerTickEvent.invoke(.dynamic) ~[?:?] {}
	at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:85) ~[eventbus-5.0.7.jar%239!/:?] {}
	at net.minecraftforge.eventbus.EventBus.post(EventBus.java:302) ~[eventbus-5.0.7.jar%239!/:?] {}
	at net.minecraftforge.eventbus.EventBus.post(EventBus.java:283) ~[eventbus-5.0.7.jar%239!/:?] {}
	at net.minecraftforge.event.ForgeEventFactory.onPlayerPostTick(ForgeEventFactory.java:856) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2376%2382!/:?] {re:classloading}
	at net.minecraft.world.entity.player.Player.tick(Player.java:278) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2377!/:?] {re:classloading,pl:accesstransformer:B}
-- Player being ticked --
Details:
	Entity Type: minecraft:player (net.minecraft.server.level.ServerPlayer)
	Entity ID: 154
	Entity Name: Dev
	Entity's Exact location: -239.30, 65.00, 496.09
	Entity's Block location: World: (-240,65,496), Section: (at 0,1,0 in -15,4,31; chunk contains blocks -240,-64,496 to -225,319,511), Region: (-1,0; contains chunks -32,0 to -1,31, blocks -512,-64,0 to -1,319,511)
	Entity's Momentum: 0.00, -0.16, 0.00
	Entity's Passengers: []
	Entity's Vehicle: null
Stacktrace:
	at net.minecraft.server.level.ServerPlayer.doTick(ServerPlayer.java:439) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2377!/:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.server.network.ServerGamePacketListenerImpl.tick(ServerGamePacketListenerImpl.java:206) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2377!/:?] {re:classloading}
	at net.minecraft.network.Connection.tick(Connection.java:233) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2377!/:?] {re:classloading}
	at net.minecraft.server.network.ServerConnectionListener.tick(ServerConnectionListener.java:142) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2377!/:?] {re:classloading}
	at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:882) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2377!/:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:808) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2377!/:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.client.server.IntegratedServer.tickServer(IntegratedServer.java:86) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2377!/:?] {re:classloading,pl:runtimedistcleaner:A}
	at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:668) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2377!/:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:258) ~[forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp.jar%2377!/:?] {re:classloading,pl:accesstransformer:B}
	at java.lang.Thread.run(Thread.java:833) [?:?] {}


-- System Details --
Details:
	Minecraft Version: 1.18.1
	Minecraft Version ID: 1.18.1
	Operating System: Windows 10 (amd64) version 10.0
	Java Version: 17.0.1, Oracle Corporation
	Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode, sharing), Oracle Corporation
	Memory: 4097892080 bytes (3908 MiB) / 6509559808 bytes (6208 MiB) up to 12859736064 bytes (12264 MiB)
	CPUs: 8
	Processor Vendor: GenuineIntel
	Processor Name: Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz
	Identifier: Intel64 Family 6 Model 158 Stepping 9
	Microarchitecture: Kaby Lake
	Frequency (GHz): 3.60
	Number of physical packages: 1
	Number of physical CPUs: 4
	Number of logical CPUs: 8
	Graphics card #0 name: NVIDIA GeForce GTX 1050 Ti
	Graphics card #0 vendor: NVIDIA (0x10de)
	Graphics card #0 VRAM (MB): 4095.00
	Graphics card #0 deviceId: 0x1c82
	Graphics card #0 versionInfo: DriverVersion=30.0.14.7111
	Graphics card #1 name: Intel(R) HD Graphics 630
	Graphics card #1 vendor: Intel Corporation (0x8086)
	Graphics card #1 VRAM (MB): 1024.00
	Graphics card #1 deviceId: 0x5912
	Graphics card #1 versionInfo: DriverVersion=27.20.100.8681
	Memory slot #0 capacity (MB): 8192.00
	Memory slot #0 clockSpeed (GHz): 2.40
	Memory slot #0 type: DDR4
	Memory slot #1 capacity (MB): 16384.00
	Memory slot #1 clockSpeed (GHz): 2.40
	Memory slot #1 type: DDR4
	Memory slot #2 capacity (MB): 8192.00
	Memory slot #2 clockSpeed (GHz): 2.40
	Memory slot #2 type: DDR4
	Memory slot #3 capacity (MB): 16384.00
	Memory slot #3 clockSpeed (GHz): 2.40
	Memory slot #3 type: DDR4
	Virtual memory max (MB): 79089.23
	Virtual memory used (MB): 35052.52
	Swap memory total (MB): 30061.29
	Swap memory used (MB): 659.84
	JVM Flags: 1 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump
	Server Running: true
	Player Count: 1 / 8; [ServerPlayer['Dev'/154, l='ServerLevel[new world]', x=-239.30, y=65.00, z=496.09, removed=KILLED]]
	Data Packs: vanilla, mod:playerelementtutorialmod, mod:forge
	Type: Integrated Server (map_client.txt)
	Is Modded: Definitely; Client brand changed to 'forge'; Server brand changed to 'forge'
	ModLauncher: 9.1.0+9.1.0+main.6690ee51
	ModLauncher launch target: forgeclientuserdev
	ModLauncher naming: mcp
	ModLauncher services: 
		 mixin PLUGINSERVICE 
		 eventbus PLUGINSERVICE 
		 object_holder_definalize PLUGINSERVICE 
		 runtime_enum_extender PLUGINSERVICE 
		 capability_token_subclass PLUGINSERVICE 
		 accesstransformer PLUGINSERVICE 
		 runtimedistcleaner PLUGINSERVICE 
		 mixin TRANSFORMATIONSERVICE 
		 fml TRANSFORMATIONSERVICE 
	FML Language Providers: 
		minecraft@1.0
		javafml@null
	Mod List: 
		forge-1.18.1-39.0.64_mapped_official_1.18.1-recomp|Minecraft                     |minecraft                     |1.18.1              |DONE      |Manifest: a1:d4:5e:04:4f:d3:d6:e0:7b:37:97:cf:77:b0:de:ad:4a:47:ce:8c:96:49:5f:0a:cf:8c:ae:b2:6d:4b:8a:3f
		main                                              |Player Element Tutorialmod    |playerelementtutorialmod      |0.0NONE             |DONE      |Manifest: NOSIGNATURE
		                                                  |Forge                         |forge                         |39.0.64             |DONE      |Manifest: NOSIGNATURE
	Crash Report UUID: ac5951cf-4cbe-4001-910d-a749a904453a
	FML: 39.0
	Forge: net.minecraftforge:39.0.64

 

Link to comment
Share on other sites

            myCapabilityInterface.tick(event.player);
            final MyCapabilityProviderEntity provider = new MyCapabilityProviderEntity(player);
            event.addCapability(IDENTIFIER, provider);

Does that mean we need addcapability?
I don't think tickevent has it, but is there a way to do it?

Link to comment
Share on other sites

        if (iof ==true) {
            LazyOptional<MyCapabilityInterface> stats1 = player.getCapability(MyCapability.INSTANCE);
            MyCapabilityInterface myCapabilityInterface = stats1.orElseThrow(IllegalStateException::new);
            myCapabilityInterface.tick(event.player);
            final MyCapabilityProviderEntity provider = new MyCapabilityProviderEntity(player);
            AttachCapabilitiesEvent.addCapability(IDENTIFIER, provider);

Is this simply how it is?
This would cause a context error, but...

Edited by ocome
Link to comment
Share on other sites

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

    • They were already updated, and just to double check I even did a cleanup and fresh update from that same page. I'm quite sure drivers are not the problem here. 
    • i tried downloading the drivers but it says no AMD graphics hardware has been detected    
    • Update your AMD/ATI drivers - get the drivers from their website - do not update via system  
    • As the title says i keep on crashing on forge 1.20.1 even without any mods downloaded, i have the latest drivers (nvidia) and vanilla minecraft works perfectly fine for me logs: https://pastebin.com/5UR01yG9
    • Hello everyone, I'm making this post to seek help for my modded block, It's a special block called FrozenBlock supposed to take the place of an old block, then after a set amount of ticks, it's supposed to revert its Block State, Entity, data... to the old block like this :  The problem I have is that the system breaks when handling multi blocks (I tried some fix but none of them worked) :  The bug I have identified is that the function "setOldBlockFields" in the item's "setFrozenBlock" function gets called once for the 1st block of multiblock getting frozen (as it should), but gets called a second time BEFORE creating the first FrozenBlock with the data of the 1st block, hence giving the same data to the two FrozenBlock :   Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=head] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@73681674 BlockEntityData : id:"minecraft:bed",x:3,y:-60,z:-6} Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=3, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=2, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} here is the code inside my custom "freeze" item :    @Override     public @NotNull InteractionResult useOn(@NotNull UseOnContext pContext) {         if (!pContext.getLevel().isClientSide() && pContext.getHand() == InteractionHand.MAIN_HAND) {             BlockPos blockPos = pContext.getClickedPos();             BlockPos secondBlockPos = getMultiblockPos(blockPos, pContext.getLevel().getBlockState(blockPos));             if (secondBlockPos != null) {                 createFrozenBlock(pContext, secondBlockPos);             }             createFrozenBlock(pContext, blockPos);             return InteractionResult.SUCCESS;         }         return super.useOn(pContext);     }     public static void createFrozenBlock(UseOnContext pContext, BlockPos blockPos) {         BlockState oldState = pContext.getLevel().getBlockState(blockPos);         BlockEntity oldBlockEntity = oldState.hasBlockEntity() ? pContext.getLevel().getBlockEntity(blockPos) : null;         CompoundTag oldBlockEntityData = oldState.hasBlockEntity() ? oldBlockEntity.serializeNBT() : null;         if (oldBlockEntity != null) {             pContext.getLevel().removeBlockEntity(blockPos);         }         BlockState FrozenBlock = setFrozenBlock(oldState, oldBlockEntity, oldBlockEntityData);         pContext.getLevel().setBlockAndUpdate(blockPos, FrozenBlock);     }     public static BlockState setFrozenBlock(BlockState blockState, @Nullable BlockEntity blockEntity, @Nullable CompoundTag blockEntityData) {         BlockState FrozenBlock = BlockRegister.FROZEN_BLOCK.get().defaultBlockState();         ((FrozenBlock) FrozenBlock.getBlock()).setOldBlockFields(blockState, blockEntity, blockEntityData);         return FrozenBlock;     }  
  • Topics

×
×
  • Create New...

Important Information

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