Jump to content

Recommended Posts

Posted

I was wondering if there would be a way to check if a player placed a block, efficiently.

 

Not an event that is called when a player places a block, but a variable within each block that can be set to true when a player places it down.

Posted
  On 6/15/2015 at 7:58 AM, Atijaf said:

Not an event that is called when a player places a block, but a variable within each block that can be set to true when a player places it down.

  Quote

Use  onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) {} and check if placer is an instace of EntityPlayer

 

Read again.

 

---------

 

There is no "easy" way to do this. You either need to create placing storage or block replacements.

 

1. Storage:

Create smart BlockPos storage that when performing event you want (e.g BreakEvent) will be checked if given block's position is in storage (placed by player). Now problem is - it will be tricky to track every change and may provide false data as some point (you know - you need to track every damn change). It's also not very efficient, best way would be to hash BlockPos and put it in hashMap for fast access. Only way I see it and has to be done smart.

To save your "storage" you would need to implement WorldSaveData.

 

2. Block Replacement:

For every block you want to track you need to create replacement copy.

Since not-placed-by-player are placed by world you can hook into events that generate world and instead of placing vanilla ones, place yours.

YourStone = created by world (replaced via generation event)

Stone (vanilla) = placed by player, acts as normal stone.

Now you know that Stone was placed, and only stone that was NOT placed it the one you made world generate instead of normal one.

 

Both ways require some work and are not always "cool".

  Quote

1.7.10 is no longer supported by forge, you are on your own.

Posted

Well. You use that method and set your own variable to true? Of course it only works for custom blocks and you have to use nbt (except of if you are using a hashmap or sth full of booleans)

Posted

Block doesn't have NBT, unless it's TileEntity. As to "boolean" - you can use metadata, but be warned that it is used by minecraft internals and won't work for vanilla - for your own block - sure, because you will read meta, for vanilla it's alredy used to define blocks.

  Quote

1.7.10 is no longer supported by forge, you are on your own.

Posted
  On 6/15/2015 at 8:15 AM, Ernio said:

There is no "easy" way to do this. You either need to create placing storage or block replacements.

 

1. Storage:

Create smart BlockPos storage that when performing event you want (e.g BreakEvent) will be checked if given block's position is in storage (placed by player). Now problem is - it will be tricky to track every change and may provide false data as some point (you know - you need to track every damn change). It's also not very efficient, best way would be to hash BlockPos and put it in hashMap for fast access. Only way I see it and has to be done smart.

To save your "storage" you would need to implement WorldSaveData.

 

I will probably give this a go.  Is WorldSaveData the same in 1.8?  I'm having troubles with implementing it.

Thanks:)

 

Edit: I extended WorldSavedData and am overriding readFromNBT and writeToNBT

Posted
  On 6/15/2015 at 5:20 PM, Ernio said:

Have look at this:

https://github.com/Questology/Questology/blob/master/src/main/java/demonmodders/questology/QuestologyWorldData.java

 

Something that I personally never used, but read/heard that some find solutions there (it looks good to me).

 

I had a look at it and am understanding what it is doing.  However, I am unsure how I would check the instance of that class if it holds the BlockPos of the block I'm breaking.  Would I use a hashMap for storing them?  Also, How would I go about using the variable BlockPos in a hashMap?

 

Thanks a bunch!

  • 11 months later...
Posted

I understand that this post is old, but I have completed implementing a block storage that stores the location, and the block's id/meta.

 

I have a List of dimensions, -1 through 14. (-1 is actually 15), and any other dimensions can go up to 14.

 

Inside the list of dimensions, holds a sorted ArrayList of my "ChunkPos" objects. (These objects contain dimension Id, X and Z position.  48 bits... 4 bits dimension, 22 bits X, 22 bits Z) 

 

This chunk also holds a HashMap of my "ChunkBlockPos" objects.  (These objects contain x -4 bits, y -8 bits, and z-4 bits coords.  Along with the block Id -12 bits and meta -4 bits)

 

Each chunk is 48 bits, and each block within is 32 bits.  That is also calculated without java's overhead for my classes and whatnot...  Unfortunately, I had to include the block's id and meta, in case if the player places a sapling and it grows, the location of the sapling is now wood and that wood was not placed by a player.

 

 

And now for getting the information.  When a player places a block, it goes into the dimension list, it then does a binary search for the chunk, and if not found, creates a new chunk, instantiates the hashmap within, and instantiates a "ChunkBlockPos", inserts that into the hashmap, and adds the hashmap to the dimension list.

 

In other words, if there are 100,000 chunks stored within the dimension list, it can find the correct chunk within 17 searches doing a binary search.  Woot!

 

AND NO, I haven't been working on this for a year.  I was just looking through my questions and found this one.  I figured I'd update it and say thanks to all of y'all!  Thanks!

Posted

The only loop hole that I can think of now is if the block is pushed somewhere.  i.e. a piston.

 

Are there any piston related events?

 

I can fix if sand is placed and then it falls (I'll just put the lowest location)

Posted

You are going to have a lot of problems making this work, sadly.

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.

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

    • Looks like an issue with biomeswevegone
    • In the server.properties, set max-tick-time to -1   if there are further issues, make a test without distanthorizons
    • Verified user can get a $300 off TℰℳU Coupon code using the code ((“{{ '[''com31844'']}}”)). This TℰℳU $100Off code is specifically for new and existing customers both and can be redeemed to receive a $100discount on your purchase. Our exclusive TℰℳU Coupon code offers a flat $100off your purchase, plus an additional 100% discount on top of that. You can slash prices by up to $100as a new TℰℳU customer using code ((“{{ '[''com31844'']}}”)). Existing users can enjoy $100off their next haul with this code. But that’s not all! With our TℰℳU Coupon codes for 2025, you can get up to 90% discount on select items and clearance sales. Whether you’re a new customer or an existing shopper, our TℰℳU codes provide extra discounts tailored just for you. Save up to 100% with these current TℰℳU Coupons ["^"{{ '[''com31844'']}} "^"] for April 2025. The latest TℰℳU coupon codes at here. New users at TℰℳU receive a $100discount on orders over $100Use the code ((“{{ '[''com31844'']}}”)) during checkout to get TℰℳU Coupon $100Off For New Users. You can save $100Off your first order with the coupon code available for a limited time only. TℰℳU 90% Off promo code ((“{{ '[''com31844'']}}”)) will save you $100on your order. To get a discount, click on the item to purchase and enter the coe. Yes, offers $100Off coupon code “{{ '[''com31844'']}}” for first time users. You can get a $100bonus plus $100Off any purchase at TℰℳU with the $100Coupon Bundle at TℰℳU if you sign up with the referral code ((“{{ '[''com31844'']}}”)) and make a first purchase of $100or more. Free TℰℳU codes $100off — ((“{{ '[''com31844'']}}”)) Get a $100discount on your TℰℳU order with the promo code "{{ '[''com31844'']}}". You can get a discount by clicking on the item to purchase and entering this TℰℳU Coupon code $100off ((“{{ '[''com31844'']}}”)). ŢℰNew User Coupon ((“{{ '[''com31844'']}})): Up To $100OFF For First-Time Users Our TℰℳU first-time user coupon codes are designed just for new customers, offering the biggest discounts and the best deals currently available on TℰℳU To maximize your savings, download the TℰℳU app and apply our TℰℳU new user coupon during checkout. TℰℳU Coupon Codes For Existing Users ((“{{ '[''com31844'']}}”)): $100Price Slash Have you been shopping on TℰℳU or a while? Our TℰℳU Coupon for existing customers is here to reward you for your continued support, offering incredible discounts on your favorite products. TℰℳU Coupon For $100Off ((“{{ '[''com31844'']}}”)): Get A Flat $100Discount On Order Value Get ready to save big with our incredible TℰℳU Coupon for $100off! Our amazing ŢℰM$100off coupon code will give you a flat $100discount on your order value, making your shopping experience even more rewarding. TℰℳU Coupon Code For $100Off ((“{{ '[''com31844'']}}”)): For Both New And Existing Customers Our incredible TℰℳU Coupon code for $100off is here to help you save big on your purchases. Whether you’re a new user or an existing customer, our $100off code for TℰℳU will give you an additional discount! TℰℳU Coupon Bundle ((“{{ '[''com31844'']}}”)): Flat $100Off + Up To $100Discount Get ready for an unbelievable deal with our TℰℳU Coupon bundle for 2025! Our TℰℳU Coupon bundles will give you a flat $100discount and an additional $100off on top of it. Free TℰℳU Coupons ((“{{ '[''com31844'']}}”)): Unlock Unlimited Savings! Get ready to unlock a world of savings with our free TℰℳU Coupons! We’ve got you covered with a wide range of TℰℳU Coupon code options that will help you maximize your shopping experience. 100% Off TℰℳU Coupons, Promo Codes + 25% Cash Back ((“{{ '[''com31844'']}}”)) Redeem TℰℳU Coupon Code ((“{{ '[''com31844'']}}”)) TℰℳU Coupon $100OFF ((“{{ '[''com31844'']}}”)) TℰℳU Coupon $100OFF FOR EXISTING CUSTOMERS ((“{{ '[''com31844'']}}”)) TℰℳU Coupon $100OFF FIRST ORDER ((“{{ '[''com31844'']}}”)) TℰℳU Coupon $100OFF REDDIT ((“{{ '[''com31844'']}}”)) TℰℳU Coupon $100OFF FOR EXISTING CUSTOMERS REDDIT ((“{{ '[''com31844'']}}”)) TℰℳU $100OFF CODE ((“{{ '[''com31844'']}}”)) TℰℳU 70 OFF COUPON 2025 ((“{{ '[''com31844'']}}”)) DOMINOS 70 RS OFF COUPON CODE ((“{{ '[''com31844'']}}”)) WHAT IS A COUPON RATE ((“{{ '[''com31844'']}}”)) TℰℳU $100OFF FOR EXISTING CUSTOMERS ((“{{ '[''com31844'']}}”)) TℰℳU $100OFF FIRST ORDER ((“{{ '[''com31844'']}}”)) TℰℳU $100OFF FREE SHIPPING ((“{{ '[''com31844'']}}”)) You can get an exclusive $100off discount on your TℰℳU purchase with the code [{{ '[''com31844'']}}] Or [{{ '[''com31844'']}}].This code is specially designed for new customers and offers a significant price cut on your shopping. Make your first purchase on TℰℳU more rewarding by using this code to get $100off instantly.   TℰℳU Coupon Code For $100Off [{{ '[''com31844'']}}] Or [{{ '[''com31844'']}}]: Get A Flat $100Discount On Order Value Get ready to save big with our incredible TℰℳU coupon for $100off! Our coupon code will give you a flat $100discount on your order value, making your shopping experience even more rewarding.   Exclusive TℰℳU Discount Code [{{ '[''com31844'']}}] Or [{{ '[''com31844'']}}]: Flat $300 OFF for New and Existing Customers Using our TℰℳU promo code you can get A$ 200 off your order and 100% off using our TℰℳU promo code [{{ '[''com31844'']}}] Or [{{ '[''com31844'']}}]. As a new TℰℳU customer, you can save up to $100using this promo code. For returning users, our TℰℳU promo code offers a $100price slash on your next shopping spree. This is our way of saying thank you for shopping with us! Get ready to save big with our incredible TℰℳU Coupon code for $300 off! Our amazing TℰℳU $300 off coupon code will give you a flat $300 discount on your order value, making your shopping experience even more rewarding.   TℰℳU Coupon Code For 40% Off ["{com31844}"] For Both New And Existing Customers   Our incredible TℰℳU Coupon code for 40% off is here to help you save big on your purchases. Whether you’re a new user or an existing customer, our 40% off code for TℰℳU will give you an additional discount!   TℰℳU Coupon Bundle ["{com31844}"]: Flat $300 Off + Up To 90% Discount   Get ready for an unbelievable deal with our TℰℳU Coupon bundle for 2025! Our TℰℳU Coupon bundles will give you a flat $300 discount and an additional 40% off on top of it.   Free TℰℳU Coupons ["{com31844}"]: Unlock Unlimited Savings!   Get ready to unlock a world of savings with our free TℰℳU Coupons! We’ve got you covered with a wide range of TℰℳU Coupon code options that will help you maximize your shopping experience.   50% Off TℰℳU Coupons, Promo Codes + 25% Cash Back ["{com31844}"]   Redeem TℰℳU Coupon Code ["{com31844}"]   TℰℳU Coupon $300 OFF ["{com31844}"]   TℰℳU Coupon $300 OFF ["{com31844}"]   TℰℳU Coupon $300 OFF FOR EXISTING CUSTOMERS ["{com31844}"]   TℰℳU Coupon $300 OFF FIRST ORDER ["{com31844}"]   TℰℳU Coupon $300 OFF FIRST ORDER ["{com31844}"]   TℰℳU Coupon $300 OFF FOR EXISTING CUSTOMERS FREE SHIPPING USA ["{com31844}"]   TℰℳU Coupon $300 OFF HOW DOES IT WORK ["{com31844}"]   TℰℳU Coupon $300 OFF FOR EXISTING CUSTOMERS CANADA ["{com31844}"]   TℰℳU Coupon $300 OFF 2025 ["{com31844}"]   TℰℳU Coupon $300 OFF FOR NEW CUSTOMERS ["{com31844}"]   TℰℳU Coupon $300 OFF CANADA ["{com31844}"]   TℰℳU Coupon $300 OFF FOR EXISTING CUSTOMERS FIRST ORDER ["{com31844}"]   TℰℳU 300 OFF COUPON BUNDLE ["{com31844}"]   This TℰℳU coupon $300 off is designed to provide substantial savings on your purchases, making shopping for your favorite items easier than ever. With our $300 off TℰℳU coupon, you'll be amazed at how much you can save on your next order. Here are the key benefits you can expect when using our coupon code {com31844} "OR" {com31844}: {com31844} "OR" {com31844}: Flat $300 off on your purchase {com31844} "OR" {com31844}: $300 coupon pack for multiple uses {com31844} "OR" {com31844}: $300 flat discount for new customers {com31844} "OR" {com31844}: Extra $300 promo code for existing customers {com31844} "OR" {com31844}: $300 coupon exclusively for USA/Canada users H2: TℰℳU Coupon Code $300 Off For New Users In 2024 New users can reap the highest benefits by using our coupon code on the TℰℳU app. This TℰℳU coupon $300 off is specifically designed to welcome new customers with incredible savings  
    • Now the serve runs for a bit, then crashes after 20 minutes of running, what's the issue here? apologies if I need to start a new post and didn't https://pastebin.com/uBpp5bCz  
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

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